From: Christoph Hellwig <hch@lst.de>
To: Sagi Grimberg <sagi@grimberg.me>
Cc: Caleb Sander <csander@purestorage.com>,
paulmck@kernel.org, Christoph Hellwig <hch@lst.de>,
Keith Busch <kbusch@kernel.org>, Jens Axboe <axboe@fb.com>,
linux-nvme@lists.infradead.org,
Uday Shankar <ushankar@purestorage.com>
Subject: Re: [PATCH] nvme: fix SRCU protection of nvme_ns_head list
Date: Tue, 22 Nov 2022 13:14:49 +0100 [thread overview]
Message-ID: <20221122121449.GA3888@lst.de> (raw)
In-Reply-To: <b42a8825-a263-22fc-9f86-5c3dada173f1@grimberg.me>
On Tue, Nov 22, 2022 at 12:06:57PM +0200, Sagi Grimberg wrote:
> I don't think rcu_mult is necessary.
It would also be really cumbersome to use.
> Lets look at nvme_ns_remove.
>
> 1. clears NVME_NS_READY + synchronize_srcu()
> -> guarantees that nshead->current_path is not re-selecting this ns
Yes.
> 2. nvme_mpath_clear_current_path + synchronize_srcu()
> -> if this ns happens to be the current_path -> clear it and fence
> concurrent bio submissions
Yes.
> 3. removes ns from head sibling list + synchronize rcu
> -> this should fence non-sleeping traversals (like revalidate_paths)
Well, non-sleeping would only matter if those non-sleeping travesals
are under rcu_read_lock(), but they are not. They are either part of
a longer srcu critical section because other code can sleep, or in
case of revalidate_paths unprotected at all (which this patch fixes).
> Maybe it is OK to have it also srcu locked and just accept that
> nshead sibling list is srcu protected. In that case, your patch
> needs to extend the srcu also the clearing of current_head pointer.
I don't see how nvme_mpath_clear_current_path needs (S)RCU protection.
It never dereferences the current_path, it just checks is for pointer
equality and if they match clears it to NULL. (I wonder if it should
use cmpxchg though).
> But looking again at your bug report, you mention that there are
> concurrent scans, one removing the ns and another accessing it.
> That cannot happen due to the scan_lock held around this section afaict.
>
> I guess it can be that in general ns removal can compete with a scan
> if due to some controller behavior that failed an identify command
> transiently in a prior scan, and a subsequent scan finds it? worth
> pinning down exactly what happened in the race you got because maybe we
> have a different issue that may manifest in other issues.
So scanning itself should be single threaded as it only happens from
the workqueue. But nvme_ns_remove can be called from
nvme_remove_namespaces in in 6.1 and earlier from the passthrough
handler.
next prev parent reply other threads:[~2022-11-22 12:14 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-18 23:27 [PATCH] nvme: fix SRCU protection of nvme_ns_head list Caleb Sander
2022-11-20 11:24 ` Sagi Grimberg
2022-11-21 7:40 ` Christoph Hellwig
2022-11-21 9:43 ` Sagi Grimberg
2022-11-21 14:57 ` Paul E. McKenney
2022-11-21 17:48 ` Caleb Sander
2022-11-21 17:59 ` Paul E. McKenney
2022-11-21 19:58 ` Caleb Sander
2022-11-22 0:25 ` Paul E. McKenney
2022-11-22 10:06 ` Sagi Grimberg
2022-11-22 12:14 ` Christoph Hellwig [this message]
2022-11-22 15:08 ` Sagi Grimberg
2022-11-24 0:12 ` Caleb Sander
2022-11-24 3:08 ` Chao Leng
2022-11-24 14:17 ` Sagi Grimberg
2022-12-01 21:27 ` Caleb Sander
2022-12-01 23:18 ` Paul E. McKenney
2022-11-24 0:24 ` [PATCH] nvme: fix (S)RCU protection of nvme_ns_head list (alternate) Caleb Sander
2022-11-24 14:19 ` Sagi Grimberg
2022-11-29 8:39 ` Christoph Hellwig
2022-11-30 8:25 ` Sagi Grimberg
2022-11-30 8:35 ` Christoph Hellwig
2022-11-30 8:40 ` Sagi Grimberg
2022-12-01 21:17 ` Caleb Sander
2022-12-02 1:21 ` Chao Leng
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=20221122121449.GA3888@lst.de \
--to=hch@lst.de \
--cc=axboe@fb.com \
--cc=csander@purestorage.com \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=paulmck@kernel.org \
--cc=sagi@grimberg.me \
--cc=ushankar@purestorage.com \
/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