From: Xiubo Li Date: Thu, 21 Sep 2023 07:02:38 +0000 (+0800) Subject: client: queue a delay cap flushing if there are ditry caps/snapcaps X-Git-Tag: v18.2.4~308^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c51da4afb47e7bb23080bc27f449efec36fe4b9c;p=ceph.git client: queue a delay cap flushing if there are ditry caps/snapcaps We should queue a cap release anyway if there are dirty caps/snapcaps for the inodes when trimming caps. Fixes: https://tracker.ceph.com/issues/62979 Signed-off-by: Xiubo Li (cherry picked from commit d14752ff1f56da93ad0d9c94fcf101945fdacadd) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 2b7db5a894d1c..24fa625f1ab2e 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -4773,6 +4773,9 @@ void Client::trim_caps(MetaSession *s, uint64_t max) // is deleted inside remove_cap ++p; + if (in->dirty_caps || in->cap_snaps.size()) + cap_delay_requeue(in.get()); + if (in->caps.size() > 1 && cap != in->auth_cap) { int mine = cap->issued | cap->implemented; int oissued = in->auth_cap ? in->auth_cap->issued : 0; @@ -4810,7 +4813,8 @@ void Client::trim_caps(MetaSession *s, uint64_t max) } if (all && in->ino != CEPH_INO_ROOT) { ldout(cct, 20) << __func__ << " counting as trimmed: " << *in << dendl; - trimmed++; + if (!in->dirty_caps && !in->cap_snaps.size()) + trimmed++; } } }