Skip to content

Commit 4f622bd

Browse files
neilbrownbrauner
authored andcommitted
ovl: narrow locking in ovl_clear_empty()
Drop the locks immediately after rename, and use a separate lock for cleanup. This makes way for future changes where locks are taken on individual dentries rather than the whole directory. Note that ovl_cleanup_whiteouts() operates on "upper", a child of "upperdir" and does not require upperdir or workdir to be locked. Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: NeilBrown <neil@brown.name> Link: https://lore.kernel.org/20250716004725.1206467-7-neil@brown.name Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent a07052e commit 4f622bd

1 file changed

Lines changed: 3 additions & 4 deletions

File tree

fs/overlayfs/dir.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,6 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry,
353353
{
354354
struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
355355
struct dentry *workdir = ovl_workdir(dentry);
356-
struct inode *wdir = workdir->d_inode;
357356
struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
358357
struct path upperpath;
359358
struct dentry *upper;
@@ -399,12 +398,12 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry,
399398
goto out_cleanup;
400399

401400
err = ovl_do_rename(ofs, workdir, opaquedir, upperdir, upper, RENAME_EXCHANGE);
401+
unlock_rename(workdir, upperdir);
402402
if (err)
403-
goto out_cleanup;
403+
goto out_cleanup_unlocked;
404404

405405
ovl_cleanup_whiteouts(ofs, upper, list);
406-
ovl_cleanup(ofs, wdir, upper);
407-
unlock_rename(workdir, upperdir);
406+
ovl_cleanup_unlocked(ofs, workdir, upper);
408407

409408
/* dentry's upper doesn't match now, get rid of it */
410409
d_drop(dentry);

0 commit comments

Comments
 (0)