summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2025-04-25 12:55:39 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2025-06-29 18:13:42 -0400
commit761de25854424aa23fd1d7b2bef5c7d184690926 (patch)
tree20a796f570c8a980f98bc5f2b0beb0419784afd8
parent86b1da96c5aeb816e4a1b60aa2b3bdcd87e28522 (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.c7
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) {