From: Al Viro Date: Fri, 22 Aug 2025 02:28:51 +0000 (-0400) Subject: do_loopback(): use __free(path_put) to deal with old_path X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=76dfde13d68a2a6e6c2409407558ee908491df36;p=users%2Fhch%2Fmisc.git 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 Signed-off-by: Al Viro --- 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; }