VFS: Fix the nfs sillyrename regression in kernel 2.6.38
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 15 Mar 2011 17:36:43 +0000 (13:36 -0400)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 15 Mar 2011 22:46:11 +0000 (15:46 -0700)
The new vfs locking scheme introduced in 2.6.38 breaks NFS sillyrename
because the latter relies on being able to determine the parent
directory of the dentry in the ->iput() callback in order to send the
appropriate unlink rpc call.

Looking at the code that cares about races with dput(), there doesn't
seem to be anything that specifically uses d_parent as a test for
whether or not there is a race:
  - __d_lookup_rcu(), __d_lookup() all test for d_hashed() after d_parent
  - shrink_dcache_for_umount() is safe since nothing else can rearrange
    the dentries in that super block.
  - have_submount(), select_parent() and d_genocide() can test for a
    deletion if we set the DCACHE_DISCONNECTED flag when the dentry
    is removed from the parent's d_subdirs list.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@kernel.org (2.6.38, needs commit c826cb7dfce8 "dcache.c:
create helper function for duplicated functionality" )
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/dcache.c

diff --cc fs/dcache.c
Simple merge