On Wed, Jun 25, 2025 at 1:07 AM NeilBrown <neil@xxxxxxxxxx> wrote: > > Unlock the parents immediately after the rename, and use > ovl_cleanup_unlocked() for cleanup, which takes a separate lock. > > This makes way for future changes where locks are taken on individual > dentries rather than the whole directory. > > Signed-off-by: NeilBrown <neil@xxxxxxxxxx> FYI I am not reviewing this one because the code was made too much spaghetti to my taste by patch 2, so I will wait for a better version Thanks, Amir. > --- > fs/overlayfs/dir.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c > index e3ea7d02219f..2b879d7c386e 100644 > --- a/fs/overlayfs/dir.c > +++ b/fs/overlayfs/dir.c > @@ -440,9 +440,7 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > { > struct ovl_fs *ofs = OVL_FS(dentry->d_sb); > struct dentry *workdir = ovl_workdir(dentry); > - struct inode *wdir = workdir->d_inode; > struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); > - struct inode *udir = upperdir->d_inode; > struct dentry *upper; > struct dentry *newdentry; > int err; > @@ -513,22 +511,23 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > > err = ovl_do_rename(ofs, workdir, newdentry, upperdir, upper, > RENAME_EXCHANGE); > + unlock_rename(workdir, upperdir); > if (err) > - goto out_cleanup_locked; > + goto out_cleanup; > > - ovl_cleanup(ofs, wdir, upper); > + ovl_cleanup_unlocked(ofs, workdir, upper); > } else { > err = ovl_do_rename(ofs, workdir, newdentry, upperdir, upper, 0); > + unlock_rename(workdir, upperdir); > if (err) > - goto out_cleanup_locked; > + goto out_cleanup; > } > ovl_dir_modified(dentry->d_parent, false); > err = ovl_instantiate(dentry, inode, newdentry, hardlink, NULL); > if (err) { > - ovl_cleanup(ofs, udir, newdentry); > + ovl_cleanup_unlocked(ofs, upperdir, newdentry); > dput(newdentry); > } > - unlock_rename(workdir, upperdir); > out_dput: > dput(upper); > out: > -- > 2.49.0 > >