On Fri, Feb 18, 2022 at 02:33:31PM -0500, Rik van Riel wrote: > On Fri, 2022-02-18 at 19:26 +0000, Al Viro wrote: > > On Fri, Feb 18, 2022 at 01:31:13PM -0500, Rik van Riel wrote: > > > After kern_unmount returns, callers can no longer access the > > > vfsmount structure. However, the vfsmount structure does need > > > to be kept around until the end of the RCU grace period, to > > > make sure other accesses have all gone away too. > > > > > > This can be accomplished by either gating each kern_unmount > > > on synchronize_rcu (the comment in the code says it all), or > > > by deferring the freeing until the next grace period, where > > > it needs to be handled in a workqueue due to the locking in > > > mntput_no_expire(). > > > > NAK. There's code that relies upon kern_unmount() being > > synchronous. That's precisely the reason why MNT_INTERNAL > > is treated that way in mntput_no_expire(). > > Fair enough. Should I make a kern_unmount_rcu() version > that gets called just from mq_put_mnt()? Umm... I'm not sure you can afford having struct ipc_namespace freed and reused before the mqueue superblock gets at least to deactivate_locked_super().