]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
change_mnt_propagation(): move ->mnt_master assignment into MS_SLAVE case
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 25 Jun 2025 03:54:41 +0000 (23:54 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 29 Jun 2025 23:03:30 +0000 (19:03 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/pnode.c

index 69278079faeb7d2baa43e518bd90dd53e3110c5c..cbf5f5746252d625d4430d058d3b50e3e54cc062 100644 (file)
@@ -104,13 +104,14 @@ static void transfer_propagation(struct mount *mnt, struct mount *to)
  */
 void change_mnt_propagation(struct mount *mnt, int type)
 {
+       struct mount *m = mnt->mnt_master;
+
        if (type == MS_SHARED) {
                set_mnt_shared(mnt);
                return;
        }
        if (IS_MNT_SHARED(mnt)) {
-               struct mount *m = propagation_source(mnt);
-
+               m = propagation_source(mnt);
                if (list_empty(&mnt->mnt_share)) {
                        mnt_release_group_id(mnt);
                } else {
@@ -119,13 +120,12 @@ void change_mnt_propagation(struct mount *mnt, int type)
                }
                CLEAR_MNT_SHARED(mnt);
                transfer_propagation(mnt, m);
-               mnt->mnt_master = m;
        }
        hlist_del_init(&mnt->mnt_slave);
        if (type == MS_SLAVE) {
-               if (mnt->mnt_master)
-                       hlist_add_head(&mnt->mnt_slave,
-                                &mnt->mnt_master->mnt_slave_list);
+               mnt->mnt_master = m;
+               if (m)
+                       hlist_add_head(&mnt->mnt_slave, &m->mnt_slave_list);
        } else {
                mnt->mnt_master = NULL;
                if (type == MS_UNBINDABLE)