diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2025-06-27 23:04:23 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2025-06-29 19:03:29 -0400 |
| commit | 15e710b8bbb5c537c39ccaa23963d01c76946834 (patch) | |
| tree | 0803c6f00f5e3c634171dbb574e64c793160c79e /fs/pnode.c | |
| parent | propagate_mnt(): handle all peer groups in the same loop (diff) | |
| download | linux-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.c | 22 |
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) { |
