From: "jianchao.wang" <jianchao.w.wang@oracle.com>
To: Ming Lei <ming.lei@redhat.com>
Cc: Keith Busch <keith.busch@intel.com>, Jens Axboe <axboe@kernel.dk>,
Sagi Grimberg <sagi@grimberg.me>,
linux-nvme@lists.infradead.org, linux-block@vger.kernel.org,
Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH V2 5/5] nvme: pci: simplify timeout handling
Date: Wed, 2 May 2018 13:12:57 +0800 [thread overview]
Message-ID: <eee63159-aae9-1936-008d-024dce13a69b@oracle.com> (raw)
In-Reply-To: <20180502045423.GE22363@ming.t460p>
Hi Ming
On 05/02/2018 12:54 PM, Ming Lei wrote:
>> We need to return BLK_EH_RESET_TIMER in nvme_timeout then:
>> 1. defer the completion. we can't unmap the io request before close the controller totally, so not BLK_EH_HANDLED.
>> 2. nvme_cancel_request could complete it. blk_mq_complete_request is invoked by nvme_cancel_request, so not BLK_EH_NOT_HANDLED.
> We don't need to change return value of .timeout() any more after
> calling nvme_quiesce_timeout():
>
> Thanks the single EH kthread, once nvme_quiesce_timeout() returns, all
> timed-out requests have been handled already. Some of them may be completed,
> and others may be handled as RESET_TIMER, but none of them are handled as
> NOT_HANDLED because nvme_timeout() won't return that value.
>
> So the following blk_mq_tagset_busy_iter(nvme_cancel_request) can handle
> all in-flight requests because timeout is drained and quiesced.
The key point here is we cannot unmap the io requests before we close the controller directly.
The nvme controller may still hold the command after we complete and unmap the io request in nvme_timeout.
This will cause memory corruption.
So we cannot just schedule the eh recovery kthread then return BLK_EH_HANDLED.
We need to deffer the completion of timeout requests until the controller has been closed totally in nvme_dev_disable.
Thanks
Jianchao
next prev parent reply other threads:[~2018-05-02 5:12 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-29 15:41 [PATCH V2 0/5] nvme: pci: fix & improve timeout handling Ming Lei
2018-04-29 15:41 ` [PATCH V2 1/5] block: introduce blk_quiesce_timeout() and blk_unquiesce_timeout() Ming Lei
2018-05-02 2:23 ` jianchao.wang
2018-05-02 3:33 ` Ming Lei
2018-05-02 5:16 ` jianchao.wang
2018-04-29 15:41 ` [PATCH V2 2/5] nvme: pci: cover timeout for admin commands running in EH Ming Lei
2018-04-29 15:41 ` [PATCH V2 3/5] nvme: pci: only wait freezing if queue is frozen Ming Lei
2018-04-29 15:41 ` [PATCH V2 4/5] nvme: fix race between freeze queues and unfreeze queues Ming Lei
2018-04-29 15:41 ` [PATCH V2 5/5] nvme: pci: simplify timeout handling Ming Lei
2018-05-02 2:23 ` jianchao.wang
2018-05-02 4:54 ` Ming Lei
2018-05-02 5:12 ` jianchao.wang [this message]
2018-05-02 7:27 ` Ming Lei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eee63159-aae9-1936-008d-024dce13a69b@oracle.com \
--to=jianchao.w.wang@oracle.com \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=keith.busch@intel.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=ming.lei@redhat.com \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox