diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index db684686f48aac7765e6186fb836e8418421d225..8774b28115970b538fa2af043eb7e2ac84aa2570 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -939,6 +939,10 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
 			     req->r_old_dentry->d_name.len,
 			     req->r_old_dentry->d_name.name,
 			     dn, dn->d_name.len, dn->d_name.name);
+			/* ensure target dentry is invalidated, despite
+			   rehashing bug in vfs_rename_dir */
+			dn->d_time = jiffies;
+			ceph_dentry(dn)->lease_shared_gen = 0;
 			/* take overwritten dentry's readdir offset */
 			ceph_dentry(req->r_old_dentry)->offset =
 				ceph_dentry(dn)->offset;