aboutsummaryrefslogtreecommitdiffstats
path: root/fs/pnode.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2025-06-27 23:04:23 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2025-06-29 19:03:29 -0400
commit15e710b8bbb5c537c39ccaa23963d01c76946834 (patch)
tree0803c6f00f5e3c634171dbb574e64c793160c79e /fs/pnode.c
parentpropagate_mnt(): handle all peer groups in the same loop (diff)
downloadlinux-15e710b8bbb5c537c39ccaa23963d01c76946834.tar.gz
linux-15e710b8bbb5c537c39ccaa23963d01c76946834.zip
propagate_one(): separate the "do we need secondary here?" logics
take the checks into separate helper - need_secondary(mount, mountpoint). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/pnode.c')
-rw-r--r--fs/pnode.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/fs/pnode.c b/fs/pnode.c
index f55295e26217..7c832f98595c 100644
--- a/fs/pnode.c
+++ b/fs/pnode.c
@@ -218,19 +218,24 @@ static struct mount *next_group(struct mount *m, struct mount *origin)
static struct mount *last_dest, *first_source, *last_source;
static struct hlist_head *list;
-static int propagate_one(struct mount *m, struct mountpoint *dest_mp)
+static bool need_secondary(struct mount *m, struct mountpoint *dest_mp)
{
- struct mount *child;
- int type;
/* skip ones added by this propagate_mnt() */
if (IS_MNT_NEW(m))
- return 0;
+ return false;
/* skip if mountpoint isn't visible in m */
if (!is_subdir(dest_mp->m_dentry, m->mnt.mnt_root))
- return 0;
+ return false;
/* skip if m is in the anon_ns */
if (is_anon_ns(m->mnt_ns))
- return 0;
+ return false;
+ return true;
+}
+
+static int propagate_one(struct mount *m, struct mountpoint *dest_mp)
+{
+ struct mount *child;
+ int type;
if (peers(m, last_dest)) {
type = CL_MAKE_SHARED;
@@ -313,11 +318,12 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
n = m;
}
do {
+ if (!need_secondary(n, dest_mp))
+ continue;
err = propagate_one(n, dest_mp);
if (err)
break;
- n = next_peer(n);
- } while (n != m);
+ } while ((n = next_peer(n)) != m);
}
hlist_for_each_entry(n, tree_list, mnt_hash) {