Hey everyone, This is an attempty to allow concurrent mounters and iterators to wait on superblock state changes without having to hold s_umount. This is made necessary by recent attempts to open block devices after superblock creation and fixing deadlocks due to blkdev_put() trying to acquire s_umount while s_umount is already held. This is on top of Jan's and Christoph's work in vfs.super. Obviously not for v6.6. I guess this is in between an RFC and meaning it. I hope I got it right but this is intricate. It reliably survives xfstests for btrfs, ext4, and xfs while concurrently having 7 processes running ustat() hammering on @super_blocks and a while true loop that tries to mount a filsystem with an invalid superblock hammering on sget{_fc}() concurrently as well. Thanks and don't hit me over the head with things. Christian Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx> --- Christian Brauner (3): super: use super_{lock,unlock}() super: wait for nascent superblocks super: wait until we passed kill super fs/super.c | 327 ++++++++++++++++++++++++++++++++++++++++++----------- include/linux/fs.h | 2 + 2 files changed, 261 insertions(+), 68 deletions(-) --- base-commit: f3aeab61fb15edef1e81828da8dbf0814541e49b change-id: 20230816-vfs-super-fixes-v3-f2cff6192a50