Don't worry I did not work through the entire patch set. I 'm just reviewing the easy one as a snack when I am tired/hungry ;) On Fri, Jul 11, 2025 at 1:21 AM NeilBrown <neil@xxxxxxxxxx> wrote: > > The only remaining user of ovl_cleanup() is ovl_cleanup_locked(), so we You meant ovl_cleanup_unlocked() > no longer need both. > > This patch moves ovl_cleanup() code into ovl_cleanup_locked(), and then > renames ovl_cleanup_locked() to ovl_cleanup(). I know I wrote in v1 review that it may be ok to combine the helpers, but looking at this patch I think I prefer to keep it a rename only ovl_cleanup() => ovl_cleanup_locked() ovl_cleanup_unlocked() => ovl_cleanup() You can either leave ovl_cleanup_locked() exported or make it static I am fine with either way. Thanks, Amir. > > Signed-off-by: NeilBrown <neil@xxxxxxxxxx> > --- > fs/overlayfs/copy_up.c | 6 ++--- > fs/overlayfs/dir.c | 52 ++++++++++++++++------------------------ > fs/overlayfs/overlayfs.h | 3 +-- > fs/overlayfs/readdir.c | 10 ++++---- > fs/overlayfs/super.c | 4 ++-- > fs/overlayfs/util.c | 2 +- > 6 files changed, 33 insertions(+), 44 deletions(-) > > diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c > index 7b84a39c081f..f345f2899ccf 100644 > --- a/fs/overlayfs/copy_up.c > +++ b/fs/overlayfs/copy_up.c > @@ -570,7 +570,7 @@ static int ovl_create_index(struct dentry *dentry, const struct ovl_fh *fh, > parent_unlock(indexdir); > out: > if (err) > - ovl_cleanup_unlocked(ofs, indexdir, temp); > + ovl_cleanup(ofs, indexdir, temp); > ovl_end_write(dentry); > dput(temp); > free_name: > @@ -856,13 +856,13 @@ static int ovl_copy_up_workdir(struct ovl_copy_up_ctx *c) > cleanup: > unlock_rename(c->workdir, c->destdir); > cleanup_unlocked: > - ovl_cleanup_unlocked(ofs, c->workdir, temp); > + ovl_cleanup(ofs, c->workdir, temp); > dput(temp); > goto out; > > cleanup_need_write: > ovl_start_write(c->dentry); > - ovl_cleanup_unlocked(ofs, c->workdir, temp); > + ovl_cleanup(ofs, c->workdir, temp); > ovl_end_write(c->dentry); > dput(temp); > return err; > diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c > index 58078ce67d6a..7e7f701c7ae4 100644 > --- a/fs/overlayfs/dir.c > +++ b/fs/overlayfs/dir.c > @@ -24,16 +24,21 @@ MODULE_PARM_DESC(redirect_max, > > static int ovl_set_redirect(struct dentry *dentry, bool samedir); > > -int ovl_cleanup(struct ovl_fs *ofs, struct inode *wdir, struct dentry *wdentry) > +int ovl_cleanup(struct ovl_fs *ofs, struct dentry *workdir, > + struct dentry *wdentry) > { > int err; > > - dget(wdentry); > - if (d_is_dir(wdentry)) > - err = ovl_do_rmdir(ofs, wdir, wdentry); > - else > - err = ovl_do_unlink(ofs, wdir, wdentry); > - dput(wdentry); > + err = parent_lock(workdir, wdentry); > + if (!err) { > + dget(wdentry); > + if (d_is_dir(wdentry)) > + err = ovl_do_rmdir(ofs, workdir->d_inode, wdentry); > + else > + err = ovl_do_unlink(ofs, workdir->d_inode, wdentry); > + dput(wdentry); > + parent_unlock(workdir); > + } > > if (err) { > pr_err("cleanup of '%pd2' failed (%i)\n", > @@ -43,21 +48,6 @@ int ovl_cleanup(struct ovl_fs *ofs, struct inode *wdir, struct dentry *wdentry) > return err; > } > > -int ovl_cleanup_unlocked(struct ovl_fs *ofs, struct dentry *workdir, > - struct dentry *wdentry) > -{ > - int err; > - > - err = parent_lock(workdir, wdentry); > - if (err) > - return err; > - > - ovl_cleanup(ofs, workdir->d_inode, wdentry); > - parent_unlock(workdir); > - > - return err; > -} > - > struct dentry *ovl_lookup_temp(struct ovl_fs *ofs, struct dentry *workdir) > { > struct dentry *temp; > @@ -148,14 +138,14 @@ int ovl_cleanup_and_whiteout(struct ovl_fs *ofs, struct dentry *dir, > if (err) > goto kill_whiteout; > if (flags) > - ovl_cleanup_unlocked(ofs, ofs->workdir, dentry); > + ovl_cleanup(ofs, ofs->workdir, dentry); > > out: > dput(whiteout); > return err; > > kill_whiteout: > - ovl_cleanup_unlocked(ofs, ofs->workdir, whiteout); > + ovl_cleanup(ofs, ofs->workdir, whiteout); > goto out; > } > > @@ -350,7 +340,7 @@ static int ovl_create_upper(struct dentry *dentry, struct inode *inode, > return 0; > > out_cleanup: > - ovl_cleanup_unlocked(ofs, upperdir, newdentry); > + ovl_cleanup(ofs, upperdir, newdentry); > dput(newdentry); > return err; > } > @@ -409,7 +399,7 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry, > unlock_rename(workdir, upperdir); > > ovl_cleanup_whiteouts(ofs, upper, list); > - ovl_cleanup_unlocked(ofs, workdir, upper); > + ovl_cleanup(ofs, workdir, upper); > > /* dentry's upper doesn't match now, get rid of it */ > d_drop(dentry); > @@ -419,7 +409,7 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry, > out_cleanup: > unlock_rename(workdir, upperdir); > out_cleanup_unlocked: > - ovl_cleanup_unlocked(ofs, workdir, opaquedir); > + ovl_cleanup(ofs, workdir, opaquedir); > dput(opaquedir); > out: > return ERR_PTR(err); > @@ -514,7 +504,7 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > if (err) > goto out_cleanup; > > - ovl_cleanup_unlocked(ofs, workdir, upper); > + ovl_cleanup(ofs, workdir, upper); > } else { > err = ovl_do_rename(ofs, workdir, newdentry, upperdir, upper, 0); > unlock_rename(workdir, upperdir); > @@ -524,7 +514,7 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > ovl_dir_modified(dentry->d_parent, false); > err = ovl_instantiate(dentry, inode, newdentry, hardlink, NULL); > if (err) { > - ovl_cleanup_unlocked(ofs, upperdir, newdentry); > + ovl_cleanup(ofs, upperdir, newdentry); > dput(newdentry); > } > out_dput: > @@ -539,7 +529,7 @@ static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, > out_cleanup_locked: > unlock_rename(workdir, upperdir); > out_cleanup: > - ovl_cleanup_unlocked(ofs, workdir, newdentry); > + ovl_cleanup(ofs, workdir, newdentry); > dput(newdentry); > goto out_dput; > } > @@ -1266,7 +1256,7 @@ static int ovl_rename(struct mnt_idmap *idmap, struct inode *olddir, > unlock_rename(new_upperdir, old_upperdir); > > if (cleanup_whiteout) > - ovl_cleanup_unlocked(ofs, old_upperdir, newdentry); > + ovl_cleanup(ofs, old_upperdir, newdentry); > > if (overwrite && d_inode(new)) { > if (new_is_dir) > diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h > index bda25287c510..1bebfdcd4d90 100644 > --- a/fs/overlayfs/overlayfs.h > +++ b/fs/overlayfs/overlayfs.h > @@ -857,8 +857,7 @@ struct ovl_cattr { > struct dentry *ovl_create_real(struct ovl_fs *ofs, > struct dentry *parent, struct dentry *newdentry, > struct ovl_cattr *attr); > -int ovl_cleanup(struct ovl_fs *ofs, struct inode *dir, struct dentry *dentry); > -int ovl_cleanup_unlocked(struct ovl_fs *ofs, struct dentry *workdir, struct dentry *dentry); > +int ovl_cleanup(struct ovl_fs *ofs, struct dentry *workdir, struct dentry *dentry); > struct dentry *ovl_lookup_temp(struct ovl_fs *ofs, struct dentry *workdir); > struct dentry *ovl_create_temp(struct ovl_fs *ofs, struct dentry *workdir, > struct ovl_cattr *attr); > diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c > index 4127d1f160b3..5a05842c60c5 100644 > --- a/fs/overlayfs/readdir.c > +++ b/fs/overlayfs/readdir.c > @@ -1048,7 +1048,7 @@ void ovl_cleanup_whiteouts(struct ovl_fs *ofs, struct dentry *upper, > continue; > } > if (dentry->d_inode) > - ovl_cleanup_unlocked(ofs, upper, dentry); > + ovl_cleanup(ofs, upper, dentry); > dput(dentry); > } > } > @@ -1156,7 +1156,7 @@ int ovl_workdir_cleanup(struct ovl_fs *ofs, struct dentry *parent, > int err; > > if (!d_is_dir(dentry) || level > 1) > - return ovl_cleanup_unlocked(ofs, parent, dentry); > + return ovl_cleanup(ofs, parent, dentry); > > err = parent_lock(parent, dentry); > if (err) > @@ -1168,7 +1168,7 @@ int ovl_workdir_cleanup(struct ovl_fs *ofs, struct dentry *parent, > > err = ovl_workdir_cleanup_recurse(ofs, &path, level + 1); > if (!err) > - err = ovl_cleanup_unlocked(ofs, parent, dentry); > + err = ovl_cleanup(ofs, parent, dentry); > } > > return err; > @@ -1217,7 +1217,7 @@ int ovl_indexdir_cleanup(struct ovl_fs *ofs) > goto next; > } else if (err == -ESTALE) { > /* Cleanup stale index entries */ > - err = ovl_cleanup_unlocked(ofs, indexdir, index); > + err = ovl_cleanup(ofs, indexdir, index); > } else if (err != -ENOENT) { > /* > * Abort mount to avoid corrupting the index if > @@ -1233,7 +1233,7 @@ int ovl_indexdir_cleanup(struct ovl_fs *ofs) > err = ovl_cleanup_and_whiteout(ofs, indexdir, index); > } else { > /* Cleanup orphan index entries */ > - err = ovl_cleanup_unlocked(ofs, indexdir, index); > + err = ovl_cleanup(ofs, indexdir, index); > } > > if (err) > diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c > index 3c012c8f7c88..e3dd60c459e2 100644 > --- a/fs/overlayfs/super.c > +++ b/fs/overlayfs/super.c > @@ -603,11 +603,11 @@ static int ovl_check_rename_whiteout(struct ovl_fs *ofs) > > /* Best effort cleanup of whiteout and temp file */ > if (err) > - ovl_cleanup_unlocked(ofs, workdir, whiteout); > + ovl_cleanup(ofs, workdir, whiteout); > dput(whiteout); > > cleanup_temp: > - ovl_cleanup_unlocked(ofs, workdir, temp); > + ovl_cleanup(ofs, workdir, temp); > release_dentry_name_snapshot(&name); > dput(temp); > dput(dest); > diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c > index 5218a477551b..c91c3a9187b0 100644 > --- a/fs/overlayfs/util.c > +++ b/fs/overlayfs/util.c > @@ -1116,7 +1116,7 @@ static void ovl_cleanup_index(struct dentry *dentry) > indexdir, index); > } else { > /* Cleanup orphan index entries */ > - err = ovl_cleanup_unlocked(ofs, indexdir, index); > + err = ovl_cleanup(ofs, indexdir, index); > } > if (err) > goto fail; > -- > 2.49.0 >