]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - block/blk-mq-sched.c
blk-mq: fail the request in case issue failure
[mirror_ubuntu-bionic-kernel.git] / block / blk-mq-sched.c
index 1518c794a78cd1194b129a6d14942df3be6f5265..45d8e861fe55f184929a19ac81a6a70e185163bb 100644 (file)
@@ -465,8 +465,19 @@ void blk_mq_sched_insert_requests(struct request_queue *q,
 
        if (e && e->type->ops.mq.insert_requests)
                e->type->ops.mq.insert_requests(hctx, list, false);
-       else
+       else {
+               /*
+                * try to issue requests directly if the hw queue isn't
+                * busy in case of 'none' scheduler, and this way may save
+                * us one extra enqueue & dequeue to sw queue.
+                */
+               if (!hctx->dispatch_busy && !e && !run_queue_async) {
+                       blk_mq_try_issue_list_directly(hctx, list);
+                       if (list_empty(list))
+                               return;
+               }
                blk_mq_insert_requests(hctx, ctx, list);
+       }
 
        blk_mq_run_hw_queue(hctx, run_queue_async);
 }