diff options
author | Jens Axboe <axboe@kernel.dk> | 2020-06-04 19:23:39 +0200 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-06-22 04:44:25 +0200 |
commit | 5a473e8311b582a40c10409a0f4bb39f42aa8123 (patch) | |
tree | 87f06802ab216f218f5d34d8c10323a3e580a736 /block | |
parent | io_uring: separate reporting of ring pages from registered pages (diff) | |
download | linux-5a473e8311b582a40c10409a0f4bb39f42aa8123.tar.xz linux-5a473e8311b582a40c10409a0f4bb39f42aa8123.zip |
block: provide plug based way of signaling forced no-wait semantics
Provide a way for the caller to specify that IO should be marked
with REQ_NOWAIT to avoid blocking on allocation.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-core.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index 03252af8c82c..62a4904db921 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -958,6 +958,7 @@ generic_make_request_checks(struct bio *bio) struct request_queue *q; int nr_sectors = bio_sectors(bio); blk_status_t status = BLK_STS_IOERR; + struct blk_plug *plug; char b[BDEVNAME_SIZE]; might_sleep(); @@ -971,6 +972,10 @@ generic_make_request_checks(struct bio *bio) goto end_io; } + plug = blk_mq_plug(q, bio); + if (plug && plug->nowait) + bio->bi_opf |= REQ_NOWAIT; + /* * For a REQ_NOWAIT based request, return -EOPNOTSUPP * if queue is not a request based queue. @@ -1800,6 +1805,7 @@ void blk_start_plug(struct blk_plug *plug) INIT_LIST_HEAD(&plug->cb_list); plug->rq_count = 0; plug->multiple_queues = false; + plug->nowait = false; /* * Store ordering should not be needed here, since a potential |