diff --git a/[refs] b/[refs] index bc4903d49e76..8af054dca0b7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f3c737de8f57b5ce756010c2175f7d574194b30d +refs/heads/master: 17d5c8ca7572124c9623045f24b0c21d4aa2b47f diff --git a/trunk/block/blk-timeout.c b/trunk/block/blk-timeout.c index 8f570c4c80ee..1ec0d503cacd 100644 --- a/trunk/block/blk-timeout.c +++ b/trunk/block/blk-timeout.c @@ -230,6 +230,13 @@ void blk_abort_queue(struct request_queue *q) list_for_each_entry_safe(rq, tmp, &list, timeout_list) blk_abort_request(rq); + /* + * Occasionally, blk_abort_request() will return without + * deleting the element from the list. Make sure we add those back + * instead of leaving them on the local stack list. + */ + list_splice(&list, &q->timeout_list); + spin_unlock_irqrestore(q->queue_lock, flags); }