diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2025-04-25 12:55:39 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2025-06-29 18:13:42 -0400 |
commit | 761de25854424aa23fd1d7b2bef5c7d184690926 (patch) | |
tree | 20a796f570c8a980f98bc5f2b0beb0419784afd8 | |
parent | 86b1da96c5aeb816e4a1b60aa2b3bdcd87e28522 (diff) |
do_move_mount(): take dropping the old mountpoint into attach_recursive_mnt()
... 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>
-rw-r--r-- | fs/namespace.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index adb37f06ba68..e5f8fde57c99 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -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) { |