When injecting a fake timeout into the null_blk driver by fail_io_timeout, the request timeout handler doen't execute blk_mq_complete_request(), so the complete callback will never be executed for that timed out request. The null_blk driver also has a driver-specific fake timeout mechanism and does not have the problem that occur when using the generic one. Fix the problem by doing similar to what the driver-specific one does. Fixes: de3510e52b0a ("null_blk: fix command timeout completion handling") Cc: Damien Le Moal <damien.lemoal@xxxxxxx> Cc: Jens Axboe <axboe@xxxxxxxxx> Signed-off-by: Akinobu Mita <akinobu.mita@xxxxxxxxx> --- drivers/block/null_blk/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c index 4c601ca9552a..69250b3cfecd 100644 --- a/drivers/block/null_blk/main.c +++ b/drivers/block/null_blk/main.c @@ -1413,7 +1413,9 @@ static inline void nullb_complete_cmd(struct nullb_cmd *cmd) case NULL_IRQ_SOFTIRQ: switch (cmd->nq->dev->queue_mode) { case NULL_Q_MQ: - if (likely(!blk_should_fake_timeout(cmd->rq->q))) + if (unlikely(blk_should_fake_timeout(cmd->rq->q))) + cmd->fake_timeout = true; + else blk_mq_complete_request(cmd->rq); break; case NULL_Q_BIO: -- 2.34.1