On Fri, Mar 2, 2018 at 8:40 AM, 陈玉鹏 <chenyupeng-it@xxxxxx> wrote: > 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@xxxxxx> > --- > fs/ceph/inode.c | 4 ++++ > 1 file changed, 4 insertions(+) > > 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; > } > Kernel 3.19 came out three years ago, what are aiming for here? This won't be the only issue you see if you keep running something older than 3.19. Tons of things have been fixed since then. I'd strongly recommend an upgrade. Thanks, Ilya -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html