On Fri, Apr 17, 2020 at 5:08 PM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > On Fri, Apr 10, 2020 at 10:25 AM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > > > Teach ovl_indexdir_cleanup() to remove temp directories containing > > whiteouts to prepare for using index dir instead of work dir for > > removing merge directories. > > > > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> > > --- > > fs/overlayfs/overlayfs.h | 4 ++-- > > fs/overlayfs/readdir.c | 13 +++++++------ > > 2 files changed, 9 insertions(+), 8 deletions(-) > > > > diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h > > index e6f3670146ed..e00b1ff6dea9 100644 > > --- a/fs/overlayfs/overlayfs.h > > +++ b/fs/overlayfs/overlayfs.h > > @@ -394,8 +394,8 @@ void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list); > > void ovl_cache_free(struct list_head *list); > > void ovl_dir_cache_free(struct inode *inode); > > int ovl_check_d_type_supported(struct path *realpath); > > -void ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt, > > - struct dentry *dentry, int level); > > +int ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt, > > + struct dentry *dentry, int level); > > int ovl_indexdir_cleanup(struct ovl_fs *ofs); > > > > /* inode.c */ > > diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c > > index e452ff7d583d..d6b601caf122 100644 > > --- a/fs/overlayfs/readdir.c > > +++ b/fs/overlayfs/readdir.c > > @@ -1071,14 +1071,13 @@ static void ovl_workdir_cleanup_recurse(struct path *path, int level) > > ovl_cache_free(&list); > > } > > > > -void ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt, > > +int ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt, > > struct dentry *dentry, int level) > > { > > int err; > > > > if (!d_is_dir(dentry) || level > 1) { > > - ovl_cleanup(dir, dentry); > > - return; > > + return ovl_cleanup(dir, dentry); > > } > > > > err = ovl_do_rmdir(dir, dentry); > > @@ -1088,8 +1087,10 @@ void ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt, > > inode_unlock(dir); > > ovl_workdir_cleanup_recurse(&path, level + 1); > > inode_lock_nested(dir, I_MUTEX_PARENT); > > - ovl_cleanup(dir, dentry); > > + err = ovl_cleanup(dir, dentry); > > } > > + > > + return err; > > } > > > > int ovl_indexdir_cleanup(struct ovl_fs *ofs) > > @@ -1132,8 +1133,8 @@ int ovl_indexdir_cleanup(struct ovl_fs *ofs) > > if (!err) { > > goto next; > > } else if (err == -ESTALE) { > > - /* Cleanup stale index entries */ > > - err = ovl_cleanup(dir, index); > > + /* Cleanup stale index entries and leftover whiteouts */ > > + err = ovl_workdir_cleanup(dir, path.mnt, index, 1); > > I'd much prefer if cleanup of temp files were handled separately from > stale index entries. I.e. only call ovl_verify_index() on things that > might actually be index files. > Ok. fixed tested and pushed to ovl-workdir. Thanks, Amir.