diff options
author | Jianchao Wang <jianchao.w.wang@oracle.com> | 2018-12-13 20:28:19 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-12-16 10:33:57 -0500 |
commit | 5b7a6f128aad761b471ca0ff620b4841b38e596f (patch) | |
tree | 2feb1d41477244ea269220f98c648ceb742e28a3 | |
parent | 7f556a44e61d0b62d78db9a2662a5f0daef010f2 (diff) |
blk-mq: issue directly with bypass 'false' in blk_mq_sched_insert_requests
It is not necessary to issue request directly with bypass 'true'
in blk_mq_sched_insert_requests and handle the non-issued requests
itself. Just set bypass to 'false' and let blk_mq_try_issue_directly
handle them totally. Remove the blk_rq_can_direct_dispatch check,
because blk_mq_try_issue_directly can handle it well.If request is
direct-issued unsuccessfully, insert the reset.
Signed-off-by: Jianchao Wang <jianchao.w.wang@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | block/blk-mq-sched.c | 8 | ||||
-rw-r--r-- | block/blk-mq.c | 20 |
2 files changed, 12 insertions, 16 deletions
diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c index f096d8989773..5b4d52d9cba2 100644 --- a/block/blk-mq-sched.c +++ b/block/blk-mq-sched.c | |||
@@ -417,12 +417,10 @@ void blk_mq_sched_insert_requests(struct blk_mq_hw_ctx *hctx, | |||
417 | * busy in case of 'none' scheduler, and this way may save | 417 | * busy in case of 'none' scheduler, and this way may save |
418 | * us one extra enqueue & dequeue to sw queue. | 418 | * us one extra enqueue & dequeue to sw queue. |
419 | */ | 419 | */ |
420 | if (!hctx->dispatch_busy && !e && !run_queue_async) { | 420 | if (!hctx->dispatch_busy && !e && !run_queue_async) |
421 | blk_mq_try_issue_list_directly(hctx, list); | 421 | blk_mq_try_issue_list_directly(hctx, list); |
422 | if (list_empty(list)) | 422 | else |
423 | return; | 423 | blk_mq_insert_requests(hctx, ctx, list); |
424 | } | ||
425 | blk_mq_insert_requests(hctx, ctx, list); | ||
426 | } | 424 | } |
427 | 425 | ||
428 | blk_mq_run_hw_queue(hctx, run_queue_async); | 426 | blk_mq_run_hw_queue(hctx, run_queue_async); |
diff --git a/block/blk-mq.c b/block/blk-mq.c index af4dc8227954..90361fe758f8 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c | |||
@@ -1874,22 +1874,20 @@ blk_status_t blk_mq_request_issue_directly(struct request *rq, bool last) | |||
1874 | void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx, | 1874 | void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx, |
1875 | struct list_head *list) | 1875 | struct list_head *list) |
1876 | { | 1876 | { |
1877 | blk_qc_t unused; | ||
1878 | blk_status_t ret = BLK_STS_OK; | ||
1879 | |||
1877 | while (!list_empty(list)) { | 1880 | while (!list_empty(list)) { |
1878 | blk_status_t ret; | ||
1879 | struct request *rq = list_first_entry(list, struct request, | 1881 | struct request *rq = list_first_entry(list, struct request, |
1880 | queuelist); | 1882 | queuelist); |
1881 | 1883 | ||
1882 | list_del_init(&rq->queuelist); | 1884 | list_del_init(&rq->queuelist); |
1883 | ret = blk_mq_request_issue_directly(rq, list_empty(list)); | 1885 | if (ret == BLK_STS_OK) |
1884 | if (ret != BLK_STS_OK) { | 1886 | ret = blk_mq_try_issue_directly(hctx, rq, &unused, |
1885 | if (ret == BLK_STS_RESOURCE || | 1887 | false, |
1886 | ret == BLK_STS_DEV_RESOURCE) { | ||
1887 | blk_mq_request_bypass_insert(rq, | ||
1888 | list_empty(list)); | 1888 | list_empty(list)); |
1889 | break; | 1889 | else |
1890 | } | 1890 | blk_mq_sched_insert_request(rq, false, true, false); |
1891 | blk_mq_end_request(rq, ret); | ||
1892 | } | ||
1893 | } | 1891 | } |
1894 | 1892 | ||
1895 | /* | 1893 | /* |
@@ -1897,7 +1895,7 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx, | |||
1897 | * the driver there was more coming, but that turned out to | 1895 | * the driver there was more coming, but that turned out to |
1898 | * be a lie. | 1896 | * be a lie. |
1899 | */ | 1897 | */ |
1900 | if (!list_empty(list) && hctx->queue->mq_ops->commit_rqs) | 1898 | if (ret != BLK_STS_OK && hctx->queue->mq_ops->commit_rqs) |
1901 | hctx->queue->mq_ops->commit_rqs(hctx); | 1899 | hctx->queue->mq_ops->commit_rqs(hctx); |
1902 | } | 1900 | } |
1903 | 1901 | ||