diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 63113e2a4890763e255048c31a0b228cdba13a22..f9b68b2c9b120d71fded84b6ca14558092993f90 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -1466,10 +1466,12 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
 			} else if (have_lease) {
 				if (d_unhashed(dn))
 					d_add(dn, NULL);
+			}
+
+			if (!d_unhashed(dn) && have_lease)
 				update_dentry_lease(dir, dn,
 						    rinfo->dlease, session,
 						    req->r_request_started);
-			}
 			goto done;
 		}