On Mon, Aug 25, 2025 at 05:43:16AM +0100, Al Viro wrote: > ... and document the locking requirements of __has_locked_children() > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > --- > fs/namespace.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/fs/namespace.c b/fs/namespace.c > index 59948cbf9c47..eabb0d996c6a 100644 > --- a/fs/namespace.c > +++ b/fs/namespace.c > @@ -2373,6 +2373,7 @@ void dissolve_on_fput(struct vfsmount *mnt) > } > } > > +/* locks: namespace_shared && pinned(mnt) || mount_locked_reader */ > static bool __has_locked_children(struct mount *mnt, struct dentry *dentry) > { > struct mount *child; > @@ -2389,12 +2390,8 @@ static bool __has_locked_children(struct mount *mnt, struct dentry *dentry) > > bool has_locked_children(struct mount *mnt, struct dentry *dentry) > { > - bool res; > - > - read_seqlock_excl(&mount_lock); > - res = __has_locked_children(mnt, dentry); > - read_sequnlock_excl(&mount_lock); > - return res; > + scoped_guard(mount_locked_reader) > + return __has_locked_children(mnt, dentry); Agree with Linus, this should just use a plain guard().