Messages in this thread | | | From | Linus Torvalds <> | Date | Mon, 4 Jul 2022 12:16:24 -0700 | Subject | Re: [PATCH v4 43/45] namei: initialize parameters passed to step_into() |
| |
On Mon, Jul 4, 2022 at 12:03 PM Al Viro <viro@zeniv.linux.org.uk> wrote: > > Anyway, I've thrown a mount_lock check in there, running xfstests to > see how it goes...
So my reaction had been that it would be good to just do something like this:
diff --git a/fs/namei.c b/fs/namei.c index 1f28d3f463c3..25c4bcc91142 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1493,11 +1493,18 @@ static bool __follow_mount_rcu(struct n... if (flags & DCACHE_MOUNTED) { struct mount *mounted = __lookup_mnt(path->mnt, dentry); if (mounted) { + struct dentry *old_dentry = dentry; + unsigned old_seq = *seqp; + path->mnt = &mounted->mnt; dentry = path->dentry = mounted->mnt.mnt_root; nd->state |= ND_JUMPED; *seqp = read_seqcount_begin(&dentry->d_seq); *inode = dentry->d_inode; + + if (read_seqcount_retry(&old_dentry->d_seq, old_seq)) + return false; + /* * We don't need to re-check ->d_seq after this * ->d_inode read - there will be an RCU delay
but the above is just whitespace-damaged random monkey-scribbling by yours truly.
More like a "shouldn't we do something like this" than a serious patch, in other words.
IOW, it has *NOT* had a lot of real thought behind it. Purely a "shouldn't we always clearly check the old sequence number after we've picked up the new one?"
Linus
| |