]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs/pnode.c: get rid of globals
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 28 Jun 2025 03:21:57 +0000 (23:21 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 29 Jun 2025 23:03:30 +0000 (19:03 -0400)
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>
fs/pnode.c

index aeaec24f7456e3aa03629c252667f2e7c5d9fcce..e01f43820a930df44effd834b182524207fd267c 100644 (file)
@@ -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);