Message ID | 43180B106D8B514FB730205E2D1199E40399EC68@EX02.corp.qihoo.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index c6ec5aa..70a38f2 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -1345,6 +1345,10 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req) dn, d_inode(dn), ceph_vinop(d_inode(dn)), ceph_vinop(in)); d_invalidate(dn); + /* Prito to v3.19,d_invalidate might unhash the dentry unsuccessfully.*/ + if (!d_unhashed(dn)) { + d_drop(dn); + } have_lease = false; }
Prior to kernel v3.19, d_invalidate() might not unhash stale dentries due to reference count, so the stale dentries are left in the memory, causing a delayed expiration. Fixes: http://tracker.ceph.com/issues/23097 Signed-off-by: Yupeng Chen <chenyupeng-it@360.cn> --- fs/ceph/inode.c | 4 ++++ 1 file changed, 4 insertions(+) -- 1.8.3.1