]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
zloop: clear nowait flag in workqueue context
authorChaitanya Kulkarni <ckulkarnilinux@gmail.com>
Wed, 19 Nov 2025 23:22:34 +0000 (15:22 -0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 20 Nov 2025 14:42:32 +0000 (07:42 -0700)
The zloop driver advertises REQ_NOWAIT support through BLK_FEAT_NOWAIT
(enabled by default for all blk-mq devices), and honors the nowait
behavior throughout zloop_queue_rq().

However, actual I/O to the backing file is performed in a workqueue,
where blocking is allowed.

To avoid imposing unnecessary non-blocking constraints in this blocking
context, clear the REQ_NOWAIT flag before processing the request in the
workqueue context.

Signed-off-by: Chaitanya Kulkarni <ckulkarnilinux@gmail.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/zloop.c

index 1273bbca784325615ca8984a41e8bfd4279bf889..3f50321aa4a7501a27c290dd0b1866878e7e0254 100644 (file)
@@ -548,6 +548,10 @@ static void zloop_handle_cmd(struct zloop_cmd *cmd)
        struct request *rq = blk_mq_rq_from_pdu(cmd);
        struct zloop_device *zlo = rq->q->queuedata;
 
+       /* We can block in this context, so ignore REQ_NOWAIT. */
+       if (rq->cmd_flags & REQ_NOWAIT)
+               rq->cmd_flags &= ~REQ_NOWAIT;
+
        switch (req_op(rq)) {
        case REQ_OP_READ:
        case REQ_OP_WRITE: