Re: [PATCH v4 43/45] namei: initialize parameters passed to step_into()

Linus Torvalds
2022-07-04T19:16:56Z

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