diff --git a/[refs] b/[refs] index 6f5fb0c75685..a64c05cb4068 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b302545744c031eae04a43fb1c56cc17e00a193a +refs/heads/master: 4eabc941259f9d8c8fb71746d3f30c87e1d9e49b diff --git a/trunk/block/blk-core.c b/trunk/block/blk-core.c index 20d69f6beb6b..15de223c7f93 100644 --- a/trunk/block/blk-core.c +++ b/trunk/block/blk-core.c @@ -366,7 +366,14 @@ void blk_drain_queue(struct request_queue *q, bool drain_all) if (drain_all) blk_throtl_drain(q); - __blk_run_queue(q); + /* + * This function might be called on a queue which failed + * driver init after queue creation. Some drivers + * (e.g. fd) get unhappy in such cases. Kick queue iff + * dispatch queue has something on it. + */ + if (!list_empty(&q->queue_head)) + __blk_run_queue(q); if (drain_all) nr_rqs = q->rq.count[0] + q->rq.count[1];