Re: [RFC] simple_recursive_removal()

From: Al Viro
Date: Fri Nov 15 2019 - 16:18:49 EST


On Fri, Nov 15, 2019 at 07:41:38PM +0000, Al Viro wrote:
> On Fri, Nov 15, 2019 at 06:42:09PM +0000, Al Viro wrote:
> > Come to think of that, if we use IS_DEADDIR as "no more additions" marking,
> > that looks like a good candidate for all in-kernel rm -rf on ramfs-style
> > filesystems without cross-directory renames. This bit in kill_it() above
> > if victim is regular
> > __debugfs_file_removed(victim)
> > would be an fs-specific callback passed by the caller, turning the whole
> > thing into this:
>
> Umm... A bit more than that, actually - the callback would be
> void remove_one(struct dentry *victim)
> {
> if (d_is_reg(victim))
> __debugfs_file_removed(victim);
> simple_release_fs(&debugfs_mount, &debugfs_mount_count);
> }
> and the caller would do
> simple_pin_fs(&debug_fs_type, &debugfs_mount, &debugfs_mount_count);
> simple_recursive_removal(dentry, remove_one);
> simple_release_fs(&debugfs_mount, &debugfs_mount_count);

OK... debugfs and tracefs definitely convert to that; so do, AFAICS,
spufs and selinuxfs, and I wouldn't be surprised if it could be
used in a few more places... securityfs, almost certainly qibfs,
gadgetfs looks like it could make use of that. Maybe subrpc
as well, but I'll need to look in details. configfs won't,
unfortunately...