Hey, This is a mechanism that allows the holder of a block device to yield device access before actually closing the block device. If a someone yields a device then any concurrent opener claiming the device exclusively with the same blk_holder_ops as the current owner can wait for the device to be given up. Filesystems by default use fs_holder_ps and so can wait on each other. This mechanism allows us to simplify superblock handling quite a bit at the expense of requiring filesystems to yield devices. A filesytems must yield devices under s_umount. This allows costly work to be done outside of s_umount. There's nothing wrong with the way we currently do things but this does allow us to simplify things and kills a whole class of theoretical UAF when walking the superblock list. I had originally considered doing it this way but wasn't able (time-wise) to code that up but since we recently had that discussion again here it is. Survives both xfstests and blktests. Also tested this by introducing custom delays into kill_block_super() to widen the race where a superblock is removed from the instance list and the device is fully closed and synced. Based on on vfs.super and the freezer work sent out earlier. Very barebones commit messages and less analyzed then usually for possible side-effects. Thanks! Christian Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx> --- Christian Brauner (6): fs: simplify setup_bdev_super() calls xfs: simplify device handling ext4: simplify device handling bdev: simplify waiting for concurrent claimers block: mark device as about to be released fs: add ->yield_devices() block/bdev.c | 54 +++++++++++++++++++++++++++----------- fs/ext4/super.c | 15 ++++++++--- fs/super.c | 67 ++++++++++++++--------------------------------- fs/xfs/xfs_super.c | 46 +++++++++++++++++++++----------- include/linux/blk_types.h | 8 +++++- include/linux/blkdev.h | 1 + include/linux/fs.h | 1 + 7 files changed, 109 insertions(+), 83 deletions(-) --- base-commit: c6cc4b13e95115c13433136a17150768d562a54c change-id: 20231024-vfs-super-rework-ca447a3240c9