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...