Once commit 920b4530fb80430ff30ef83efe21ba1fa5623731 "NFS: nfs_rename() handle -ERESTARTSYS dentry left behind" moved the local d_move() into the RPC asyncronous context, d_move() could be called without holding the directories' i_mutex. Let's revert that commit, and a follow-up fix for it in 1/2, and then fix the original problem once more by forcing a revalidation of the old and new directories if we notice that the rename was interrupted in 2/2. v2: Add memory barrier, hold directory i_locks while revalidating, specify single-bit field width for cancelled flag. v3: Add some comments, change cancelled flag to bool. v4: Where old_dir == new_dir, don't bump revalidation counter twice. Benjamin Coddington (2): Revert "NFS: nfs_rename() handle -ERESTARTSYS dentry left behind" NFS: nfs_rename() - revalidate directories on -ERESTARTSYS fs/nfs/dir.c | 57 +++++++++++++++++++++++++------------------------ fs/nfs/unlink.c | 13 +++++++++++ include/linux/nfs_xdr.h | 1 + 3 files changed, 43 insertions(+), 28 deletions(-) -- 2.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html