[PATCHv3] nvme-pci: fix timeout request state check
Sagi Grimberg
sagi at grimberg.me
Mon Jan 23 01:45:25 PST 2023
> From: Keith Busch <kbusch at kernel.org>
>
> Polling the completion can progress the request state to IDLE, either
> inline with the completion, or through softirq. Either way, the state
> may not be COMPLETED, so don't check for that. We only care if the state
> isn't IN_FLIGHT.
>
> This is fixing an issue where the driver aborts an IO that we just
> completed. Seeing the "aborting" message instead of "polled" is very
> misleading as to where the timeout problem resides.
>
> Fixes: bf392a5dc02a9b ("nvme-pci: Remove tag from process cq")
> Signed-off-by: Keith Busch <kbusch at kernel.org>
> ---
> v2->v3: changed state check to explicitly look for not IN_FLIGHT
>
> drivers/nvme/host/pci.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
> index a2553b7d9bb8e..1ff8843bc4b36 100644
> --- a/drivers/nvme/host/pci.c
> +++ b/drivers/nvme/host/pci.c
> @@ -1362,7 +1362,7 @@ static enum blk_eh_timer_return nvme_timeout(struct request *req)
> else
> nvme_poll_irqdisable(nvmeq);
>
> - if (blk_mq_request_completed(req)) {
> + if (blk_mq_rq_state(req) != MQ_RQ_IN_FLIGHT) {
I think that this change also applies to nvmf_complete_timed_out_request
no?
More information about the Linux-nvme
mailing list