On Sat, Mar 24, 2018 at 04:50:54AM +0000, Al Viro wrote: > On Fri, Mar 23, 2018 at 09:37:35PM -0700, Matthew Wilcox wrote: > > That puts the comparison out-of-line rather than in the exit path that > > everybody uses. > > That was my first reaction as well, but... we can get there without parent > changing - just a negative dentry that got grabbed by somebody else just > as we'd been getting its ->d_lock. Moreover, this is _not_ the exit path > everyone takes - all paths reaching it go though an unlikely branch. > The common ones are actually "got all locks, everything's stable, nobody > has grabbed any references" (return true a couple of lines prior) or > "the sucker has grown references while it sat on the shrink list" as the > second (considerably more rare) option (the very first return false in > that function). Quite right. I just woke up and my brain had figured that out while I was sleeping. Thanks.