On Tue, Sep 26, 2023 at 10:25:15PM +0100, Al Viro wrote: > Before your patch: foo_kill_super() calls kill_anon_super(), > which calls kill_super_notify(), which removes the sucker from > the list, then frees ->s_fs_info. After your patch: > removal from the lists happens via the call of kill_super_notify() > *after* both of your methods had been called, while freeing > ->s_fs_info happens from the method call. IOW, you've restored > the situation prior to "super: ensure valid info". The whole > point of that commit had been to make sure that we have nothing > in the lists with ->s_fs_info pointing to a freed object. > > It's not about free_anon_bdev(); that part is fine - it's the > "we can drop the weird second call site of kill_super_notify()" > thing that is broken. The point has been to only release the anon dev_t after kill_super_notify, to prevent two of them beeing reused. Which we do as the free_anon_bdev is done directly in deactivate_locked_super. The new ->free_sb for non-block file systems frees resources, but none of them matter for sget.