]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ovl: narrow the locked region in ovl_copy_up_workdir()
authorNeilBrown <neil@brown.name>
Wed, 16 Jul 2025 00:44:15 +0000 (10:44 +1000)
committerChristian Brauner <brauner@kernel.org>
Fri, 18 Jul 2025 09:10:40 +0000 (11:10 +0200)
In ovl_copy_up_workdir() unlock immediately after the rename.  There is
nothing else in the function that needs the lock.

Signed-off-by: NeilBrown <neil@brown.name>
Link: https://lore.kernel.org/20250716004725.1206467-5-neil@brown.name
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/overlayfs/copy_up.c

index fef873d18b2da92d728e5c1da68340fcf6c3d065..8f8dbe8a1d54e38aabc92762ec95a870ea1e31c9 100644 (file)
@@ -829,9 +829,10 @@ static int ovl_copy_up_workdir(struct ovl_copy_up_ctx *c)
                goto cleanup;
 
        err = ovl_do_rename(ofs, c->workdir, temp, c->destdir, upper, 0);
+       unlock_rename(c->workdir, c->destdir);
        dput(upper);
        if (err)
-               goto cleanup;
+               goto cleanup_unlocked;
 
        inode = d_inode(c->dentry);
        if (c->metacopy_digest)
@@ -845,7 +846,6 @@ static int ovl_copy_up_workdir(struct ovl_copy_up_ctx *c)
        ovl_inode_update(inode, temp);
        if (S_ISDIR(inode->i_mode))
                ovl_set_flag(OVL_WHITEOUTS, inode);
-       unlock_rename(c->workdir, c->destdir);
 out:
        ovl_end_write(c->dentry);