]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: force sending cap revoke ack always 52506/head
authorXiubo Li <xiubli@redhat.com>
Wed, 28 Jun 2023 13:59:53 +0000 (21:59 +0800)
committerXiubo Li <xiubli@redhat.com>
Tue, 18 Jul 2023 03:09:44 +0000 (11:09 +0800)
If just before the revoke request, which will increase the 'seq', is
sent out the clients released the corresponding caps and sent out
the cap update request with old 'seq', the mds will miss checking
the seqs and calculating the caps.

We should always send an ack for revoke requests.

Fixes: https://tracker.ceph.com/issues/61782
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit 09a2e33c4aca6e72d75e2527ab5f467576d55dc8)

src/client/Client.cc

index 52980d5ecb07ca185b4a154bbb11b69a7afcb643..4d2fcbb232c1a736d8f7d4cc79a603aad4ed643e 100644 (file)
@@ -5742,6 +5742,13 @@ void Client::handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, const M
     }
   }
 
+  // just in case the caps was released just before we get the revoke msg
+  if (!check && m->get_op() == CEPH_CAP_OP_REVOKE) {
+    cap->wanted = 0; // don't let check_caps skip sending a response to MDS
+    check = true;
+    flags = CHECK_CAPS_NODELAY;
+  }
+
   if (check)
     check_caps(in, flags);