From: sepia-liu Date: Sat, 30 May 2020 10:10:15 +0000 (+0800) Subject: client: fix directory inode can not call release callback X-Git-Tag: v14.2.11~23^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F36177%2Fhead;p=ceph.git client: fix directory inode can not call release callback When use client like nfs-ganesha hold ref of dir inode, the dentry of the inode does not expirable because its state is always lru_pinned. The current code location does not tell nfs-ganesha to release dir inodes, so we should call release_callback to tell nfs-ganesha release first, and then trim dentry when its state becomes unpin. Fixes: https://tracker.ceph.com/issues/46355 Signed-off-by: sepia-liu (cherry picked from commit 60de0363ec7e1423665091bf42f67b78f11d9c1f) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 3a02b72c2ba29..52f8a4a2446e7 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -4348,10 +4348,12 @@ void Client::trim_caps(MetaSession *s, uint64_t max) all = false; } } + if (in->ll_ref == 1 && in->ino != MDS_INO_ROOT) { + _schedule_ino_release_callback(in.get()); + } if (all && in->ino != MDS_INO_ROOT) { ldout(cct, 20) << __func__ << " counting as trimmed: " << *in << dendl; trimmed++; - _schedule_ino_release_callback(in.get()); } } }