NFS: nfs_rename() - revalidate directories on -ERESTARTSYS
authorBenjamin Coddington <bcodding@redhat.com>
Fri, 16 Jun 2017 15:13:00 +0000 (11:13 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 13 Jul 2017 19:58:04 +0000 (15:58 -0400)
commit818a8dbe83fddff534b814a7d4e0c75b511dff2e
tree153d8c114f65a8fb5d8c01dea04189db01a8351d
parenta7a3b1e971cd806b81ecea3a234d8dae9de0add0
NFS: nfs_rename() - revalidate directories on -ERESTARTSYS

An interrupted rename will leave the old dentry behind if the rename
succeeds.  Fix this by forcing a lookup the next time through
->d_revalidate.

A previous attempt at solving this problem took the approach to complete
the work of the rename asynchronously, however that approach was wrong
since it would allow the d_move() to occur after the directory's i_mutex
had been dropped by the original process.

Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/dir.c
fs/nfs/unlink.c
include/linux/nfs_xdr.h