Skip to content
  • Linus Torvalds's avatar
    Revert "vfs: remove unnecessary d_unhashed() check from __d_lookup_rcu" · 2e321806
    Linus Torvalds authored
    This reverts commit 8c01a529
    
    .
    
    It turns out the d_unhashed() check isn't unnecessary after all: while
    it's true that unhashing will increment the sequence numbers, that does
    not necessarily invalidate the RCU lookup, because it might have seen
    the dentry pointer (before it got unhashed), but by the time it loaded
    the sequence number, it could have seen the *new* sequence number (after
    it got unhashed).
    
    End result: we might look up an unhashed dentry that is about to be
    freed, with the sequence number never indicating anything bad about it.
    So checking that the dentry is still hashed (*after* reading the sequence
    number) is indeed the proper fix, and was never unnecessary.
    
    Reported-by: default avatarDave Jones <davej@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2e321806