why?! it makes sure, that dentries/inodes are gone _before_ super block destroyed.mntput(path->mnt); // too early mntput()
dput(path->dentry);
Assuming that in-between this sequence someone unmounts the file system, your
patch will wait for this dput() to finish before it proceeds with unmounting
the file system. I think this isn't what we want.
No, it won't wait for anything, because if umount happened between mntput/dput, dentry is not in s_dshrinkers list.
if umount happens in parallell with dput() (where shrinker operations are), then it will behave ok - will wait for dput() and then umount. It was intended behaviour!
It should not wait.
about what?Also, please, note that such early mntput()'s are bugs!!! because such dentries can reference freed memory after last mntput(). And I remember some patches in 2.4.x/2.6.x which fixed this sequence everywhere.
Thats why I'm complaining ...