Note, this is on the border between RFC/POC and so I haven't pushed this through testing yet. But I don't want to waste more time on this before showing it.
I surveyed various fs implementations because I want the ability to extend userspace the ability to manage what devices can be onlined in a centralized way without having to force every fs to care about this. I realized that erofs allows sharing block devices with multiple superblocks. Any freeze, thaw, removal, or sync on those devices will not be communicated to the superblocks using it and our current infrastructure is unable to deal with this. This attempts to add the ability to go from device number to all the superblock using that device, iterate through them one-by-one and perform actions on them. For most fses this is a 1:1 mapping but for erofs its a 1:many mapping. This is not unreasonable infastructure to support in my opinion. I played around with some ideas for this and I want to send out an RFC to gather some early input. Signed-off-by: Christian Brauner (Amutable) <[email protected]> --- Christian Brauner (8): fs, block: move blk_mode_t and fop_flags_t into <linux/types.h> fs: add a global device to super block hash table fs: refuse to claim any frozen block device xfs: port to fs_bdev_file_open_by_path() btrfs: open via dedicated fs bdev helpers ext4: open via dedicated fs bdev helpers erofs: open via dedicated fs bdev helpers super: make fs_holder_ops private fs/btrfs/dev-replace.c | 6 +- fs/btrfs/ioctl.c | 4 +- fs/btrfs/volumes.c | 26 ++- fs/erofs/data.c | 6 + fs/erofs/internal.h | 10 ++ fs/erofs/super.c | 66 +++++-- fs/erofs/zdata.c | 10 +- fs/ext4/super.c | 12 +- fs/super.c | 452 ++++++++++++++++++++++++++++++++--------------- fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_super.c | 10 +- include/linux/blkdev.h | 9 - include/linux/fs.h | 2 - include/linux/fs/super.h | 7 + include/linux/types.h | 2 + 15 files changed, 433 insertions(+), 191 deletions(-) --- base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731 change-id: 20260602-work-super-bdev_holder_global-8cba5e52bed5
