> list removal should happen after generic_shutdown_super(). Sure, you > want the superblock to serve as bdev holder, which leads to fun > with -EBUSY if mount comes while umount still hadn't closed the > device. I suspect that it would make a lot more sense to > introduce an intermediate state - "held, but will be released > in a short while". You already have something similar, but > only for the entire disk ->bd_claiming stuff. > > Add a new primitive (will_release_bdev()), so that attempts to > claim the sucker will wait until it gets released instead of > failing with -EBUSY. And do *that* before generic_shutdown_super() > when unmounting something that is block-based. Allows to bring > the list removal back where it used to be, no UAF at all... This is essentially equivalent to what is done right now. Only that this would then happen in the block layer. I'm not sure it would buy us that much. In all likelyhood we just get a range of other issues to fix.