From: Al Viro Date: Sat, 28 Jun 2025 03:16:52 +0000 (-0400) Subject: propagate_one(): fold into the sole caller X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a2ce2a74bfeee4b66411177125f3b5749003e7f;p=thirdparty%2Fkernel%2Flinux.git propagate_one(): fold into the sole caller mechanical expansion; will be cleaned up on the next step Signed-off-by: Al Viro --- diff --git a/fs/pnode.c b/fs/pnode.c index 94de8aad4da56..aeaec24f7456e 100644 --- a/fs/pnode.c +++ b/fs/pnode.c @@ -257,35 +257,6 @@ static struct mount *find_master(struct mount *m, return last_copy; } -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; - } else { - last_source = find_master(m, last_source, first_source); - type = CL_SLAVE; - /* beginning of peer group among the slaves? */ - if (IS_MNT_SHARED(m)) - type |= CL_MAKE_SHARED; - } - - child = copy_tree(last_source, last_source->mnt.mnt_root, type); - if (IS_ERR(child)) - return PTR_ERR(child); - read_seqlock_excl(&mount_lock); - mnt_set_mountpoint(m, dest_mp, child); - read_sequnlock_excl(&mount_lock); - if (m->mnt_master) - SET_MNT_MARK(m->mnt_master); - last_dest = m; - last_source = child; - hlist_add_head(&child->mnt_hash, list); - return count_mounts(m->mnt_ns, child); -} - /* * mount 'source_mnt' under the destination 'dest_mnt' at * dentry 'dest_dentry'. And propagate that mount to @@ -302,8 +273,8 @@ static int propagate_one(struct mount *m, struct mountpoint *dest_mp) int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp, struct mount *source_mnt, struct hlist_head *tree_list) { - struct mount *m, *n; - int err = 0; + struct mount *m, *n, *child; + int err = 0, type; /* * we don't want to bother passing tons of arguments to @@ -329,7 +300,29 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp, do { if (!need_secondary(n, dest_mp)) continue; - err = propagate_one(n, dest_mp); + if (peers(n, last_dest)) { + type = CL_MAKE_SHARED; + } else { + last_source = find_master(n, last_source, first_source); + type = CL_SLAVE; + /* beginning of peer group among the slaves? */ + if (IS_MNT_SHARED(n)) + type |= CL_MAKE_SHARED; + } + child = copy_tree(last_source, last_source->mnt.mnt_root, type); + if (IS_ERR(child)) { + err = PTR_ERR(child); + break; + } + read_seqlock_excl(&mount_lock); + mnt_set_mountpoint(n, dest_mp, child); + read_sequnlock_excl(&mount_lock); + if (n->mnt_master) + SET_MNT_MARK(n->mnt_master); + last_dest = n; + last_source = child; + hlist_add_head(&child->mnt_hash, list); + err = count_mounts(n->mnt_ns, child); if (err) break; } while ((n = next_peer(n)) != m);