block: null_blk: end timed out poll request block-5.18-2022-04-14
authorMing Lei <ming.lei@redhat.com>
Wed, 13 Apr 2022 08:48:36 +0000 (16:48 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 14 Apr 2022 16:16:33 +0000 (10:16 -0600)
When poll request is timed out, it is removed from the poll list,
but not completed, so the request is leaked, and never get chance
to complete.

Fix the issue by ending it in timeout handler.

Fixes: 0a593fbbc245 ("null_blk: poll queue support")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20220413084836.1571995-1-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/null_blk/main.c

index 05b1120e66234d71ba18ba06428cd594c01ffe81..c441a4972064e8b5995cc9d35f79e1d8c377d0e2 100644 (file)
@@ -1600,7 +1600,7 @@ static enum blk_eh_timer_return null_timeout_rq(struct request *rq, bool res)
         * Only fake timeouts need to execute blk_mq_complete_request() here.
         */
        cmd->error = BLK_STS_TIMEOUT;
-       if (cmd->fake_timeout)
+       if (cmd->fake_timeout || hctx->type == HCTX_TYPE_POLL)
                blk_mq_complete_request(rq);
        return BLK_EH_DONE;
 }