]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
do_move_mount(): take dropping the old mountpoint into attach_recursive_mnt()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 25 Apr 2025 16:55:39 +0000 (12:55 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 29 Jun 2025 22:13:42 +0000 (18:13 -0400)
... and fold it with unhash_mnt() there - there's no need to retain a reference
to old_mp beyond that point, since by then all mountpoints we were going to add
are either explicitly pinned by get_mountpoint() or have stuff already added
to them.

Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namespace.c

index adb37f06ba689209e8e82a7ace8e280ab6fcb9ae..e5f8fde57c9971266567340aaeb88da7ad646c9e 100644 (file)
@@ -2682,7 +2682,7 @@ static int attach_recursive_mnt(struct mount *source_mnt,
        }
 
        if (moving) {
-               unhash_mnt(source_mnt);
+               umount_mnt(source_mnt);
                mnt_notify_add(source_mnt);
        } else {
                if (source_mnt->mnt_ns) {
@@ -3598,7 +3598,7 @@ static int do_move_mount(struct path *old_path,
        struct mount *p;
        struct mount *old;
        struct mount *parent;
-       struct mountpoint *mp, *old_mp;
+       struct mountpoint *mp;
        int err;
        bool attached, beneath = flags & MNT_TREE_BENEATH;
 
@@ -3610,7 +3610,6 @@ static int do_move_mount(struct path *old_path,
        p = real_mount(new_path->mnt);
        parent = old->mnt_parent;
        attached = mnt_has_parent(old);
-       old_mp = old->mnt_mp;
        ns = old->mnt_ns;
 
        err = -EINVAL;
@@ -3684,8 +3683,6 @@ static int do_move_mount(struct path *old_path,
        /* if the mount is moved, it should no longer be expire
         * automatically */
        list_del_init(&old->mnt_expire);
-       if (attached)
-               put_mountpoint(old_mp);
 out:
        unlock_mount(mp);
        if (!err) {