|
@@ -230,6 +230,13 @@ void blk_abort_queue(struct request_queue *q)
|
|
list_for_each_entry_safe(rq, tmp, &list, timeout_list)
|
|
list_for_each_entry_safe(rq, tmp, &list, timeout_list)
|
|
blk_abort_request(rq);
|
|
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);
|
|
spin_unlock_irqrestore(q->queue_lock, flags);
|
|
|
|
|
|
}
|
|
}
|