From: Al Viro Date: Sat, 28 Jun 2025 03:04:23 +0000 (-0400) Subject: propagate_one(): separate the "do we need secondary here?" logics X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15e710b8bbb5c537c39ccaa23963d01c76946834;p=thirdparty%2Flinux.git 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 --- diff --git a/fs/pnode.c b/fs/pnode.c index f55295e262170..7c832f98595cf 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) {