On Wed, 2024-12-11 at 13:11 +0100, Miklos Szeredi wrote: > Commit 1fa08aece425 ("nsfs: convert to path_from_stashed() helper") reused > nsfs dentry's d_fsdata, which no longer contains a pointer to > proc_ns_operations. > > Fix the remaining use in is_mnt_ns_file(). > > Fixes: 1fa08aece425 ("nsfs: convert to path_from_stashed() helper") > Cc: <stable@xxxxxxxxxxxxxxx> # v6.9 > Signed-off-by: Miklos Szeredi <mszeredi@xxxxxxxxxx> > --- > > Came across this while getting the mnt_ns in fsnotify_mark(), tested the > fix in that context. I don't have a test for mainline, though. > > fs/namespace.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/fs/namespace.c b/fs/namespace.c > index 23e81c2a1e3f..6eec7794f707 100644 > --- a/fs/namespace.c > +++ b/fs/namespace.c > @@ -2055,9 +2055,15 @@ SYSCALL_DEFINE1(oldumount, char __user *, name) > > static bool is_mnt_ns_file(struct dentry *dentry) > { > + struct ns_common *ns; > + > /* Is this a proxy for a mount namespace? */ > - return dentry->d_op == &ns_dentry_operations && > - dentry->d_fsdata == &mntns_operations; > + if (dentry->d_op != &ns_dentry_operations) > + return false; > + > + ns = d_inode(dentry)->i_private; > + > + return ns->ops == &mntns_operations; > } > > struct ns_common *from_mnt_ns(struct mnt_namespace *mnt) Took me a min to figure out how i_private gets set, but this looks correct. Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>