]> 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 53571/head
authorXiubo Li <xiubli@redhat.com>
Thu, 21 Sep 2023 07:02:38 +0000 (15:02 +0800)
committerXiubo Li <xiubli@redhat.com>
Tue, 26 Sep 2023 04:23:51 +0000 (12:23 +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>
src/client/Client.cc

index 5820ef90ae0cf35a977336a822396633ed4cd1c1..7d40bbc9440ada71dffc047ddffdef1d0fca1a47 100644 (file)
@@ -4796,6 +4796,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;
@@ -4833,7 +4836,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++;
       }
     }
   }