]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
change_mnt_propagation() cleanups, step 1
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 25 Jun 2025 03:20:47 +0000 (23:20 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 29 Jun 2025 23:03:30 +0000 (19:03 -0400)
Lift changing ->mnt_slave from do_make_slave() into the caller.
Simplifies the next steps...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/pnode.c

index b887116f0041af957b45e3fe265f4d1c301515cd..14618eac20254e353243793082eba1d7b05cfda3 100644 (file)
@@ -104,7 +104,6 @@ static int do_make_slave(struct mount *mnt)
        }
        list_for_each_entry(slave_mnt, &mnt->mnt_slave_list, mnt_slave)
                slave_mnt->mnt_master = master;
-       list_move(&mnt->mnt_slave, &master->mnt_slave_list);
        list_splice(&mnt->mnt_slave_list, master->mnt_slave_list.prev);
        INIT_LIST_HEAD(&mnt->mnt_slave_list);
        mnt->mnt_master = master;
@@ -121,8 +120,12 @@ void change_mnt_propagation(struct mount *mnt, int type)
                return;
        }
        do_make_slave(mnt);
-       if (type != MS_SLAVE) {
-               list_del_init(&mnt->mnt_slave);
+       list_del_init(&mnt->mnt_slave);
+       if (type == MS_SLAVE) {
+               if (mnt->mnt_master)
+                       list_add(&mnt->mnt_slave,
+                                &mnt->mnt_master->mnt_slave_list);
+       } else {
                mnt->mnt_master = NULL;
                if (type == MS_UNBINDABLE)
                        mnt->mnt_t_flags |= T_UNBINDABLE;