]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: queue a delay cap flushing if there are ditry caps/snapcaps 54465/head
authorXiubo Li <xiubli@redhat.com>
Thu, 21 Sep 2023 07:02:38 +0000 (15:02 +0800)
committerXiubo Li <xiubli@redhat.com>
Mon, 13 Nov 2023 00:34:17 +0000 (08:34 +0800)
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 <xiubli@redhat.com>
(cherry picked from commit d14752ff1f56da93ad0d9c94fcf101945fdacadd)

src/client/Client.cc

index 47d4ab6b5c34756a28d889b1ae9a6b2ab16ca5c4..c31f2ad7ab613bae8de6e1ce4b39e5950a2b3aad 100644 (file)
@@ -4704,6 +4704,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;
@@ -4741,7 +4744,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++;
       }
     }
   }