summaryrefslogtreecommitdiff
path: root/fs/namespace.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2025-08-21 22:28:51 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2025-09-02 19:35:58 -0400
commit76dfde13d68a2a6e6c2409407558ee908491df36 (patch)
treeb171343f8c160f0ee51bfb57b3cae0fe93ddc4c6 /fs/namespace.c
parent11941610b06820c4af7f1ff12071f159b3bf771d (diff)
do_loopback(): use __free(path_put) to deal with old_path
preparations for making unlock_mount() a __cleanup(); can't have path_put() inside mount_lock scope. Reviewed-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namespace.c')
-rw-r--r--fs/namespace.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index bdb33270ac6e..245cf2d19a6b 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -3014,7 +3014,7 @@ static struct mount *__do_loopback(struct path *old_path, int recurse)
static int do_loopback(struct path *path, const char *old_name,
int recurse)
{
- struct path old_path;
+ struct path old_path __free(path_put) = {};
struct mount *mnt = NULL, *parent;
struct pinned_mountpoint mp = {};
int err;
@@ -3024,13 +3024,12 @@ static int do_loopback(struct path *path, const char *old_name,
if (err)
return err;
- err = -EINVAL;
if (mnt_ns_loop(old_path.dentry))
- goto out;
+ return -EINVAL;
err = lock_mount(path, &mp);
if (err)
- goto out;
+ return err;
parent = real_mount(path->mnt);
if (!check_mnt(parent))
@@ -3050,8 +3049,6 @@ static int do_loopback(struct path *path, const char *old_name,
}
out2:
unlock_mount(&mp);
-out:
- path_put(&old_path);
return err;
}