aboutsummaryrefslogtreecommitdiffstats
path: root/fs/pnode.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2025-06-27 23:21:57 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2025-06-29 19:03:30 -0400
commitbc88530a20b1d5c78288ef5383d10b66d3242c48 (patch)
tree8e287b8763fb9117cab6553509b55603108568a9 /fs/pnode.c
parentpropagate_one(): fold into the sole caller (diff)
downloadlinux-bc88530a20b1d5c78288ef5383d10b66d3242c48.tar.gz
linux-bc88530a20b1d5c78288ef5383d10b66d3242c48.zip
fs/pnode.c: get rid of globals
this stuff can be local in propagate_mnt() now (and in some cases duplicates the existing variables there) Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/pnode.c')
-rw-r--r--fs/pnode.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/fs/pnode.c b/fs/pnode.c
index aeaec24f7456..e01f43820a93 100644
--- a/fs/pnode.c
+++ b/fs/pnode.c
@@ -214,10 +214,6 @@ static struct mount *next_group(struct mount *m, struct mount *origin)
}
}
-/* all accesses are serialized by namespace_sem */
-static struct mount *last_dest, *first_source, *last_source;
-static struct hlist_head *list;
-
static bool need_secondary(struct mount *m, struct mountpoint *dest_mp)
{
/* skip ones added by this propagate_mnt() */
@@ -273,18 +269,11 @@ static struct mount *find_master(struct mount *m,
int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
struct mount *source_mnt, struct hlist_head *tree_list)
{
- struct mount *m, *n, *child;
+ struct mount *m, *n, *copy, *this, *last_dest;
int err = 0, type;
- /*
- * we don't want to bother passing tons of arguments to
- * propagate_one(); everything is serialized by namespace_sem,
- * so globals will do just fine.
- */
last_dest = dest_mnt;
- first_source = source_mnt;
- last_source = source_mnt;
- list = tree_list;
+ copy = source_mnt;
if (dest_mnt->mnt_master)
SET_MNT_MARK(dest_mnt->mnt_master);
@@ -303,26 +292,26 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
if (peers(n, last_dest)) {
type = CL_MAKE_SHARED;
} else {
- last_source = find_master(n, last_source, first_source);
+ copy = find_master(n, copy, source_mnt);
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);
+ this = copy_tree(copy, copy->mnt.mnt_root, type);
+ if (IS_ERR(this)) {
+ err = PTR_ERR(this);
break;
}
read_seqlock_excl(&mount_lock);
- mnt_set_mountpoint(n, dest_mp, child);
+ mnt_set_mountpoint(n, dest_mp, this);
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);
+ copy = this;
+ hlist_add_head(&this->mnt_hash, tree_list);
+ err = count_mounts(n->mnt_ns, this);
if (err)
break;
} while ((n = next_peer(n)) != m);