zloop: clear nowait flag in workqueue context

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>
This commit is contained in:
Chaitanya Kulkarni 2025-11-19 15:22:34 -08:00 committed by Jens Axboe
parent b11e483a1c
commit e8f0abdd49
1 changed files with 4 additions and 0 deletions

View 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: