From ff8ffee7ca8d93b0d6d6ef683e80d2ff35c836bd Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Wed, 28 Jun 2023 21:59:53 +0800 Subject: [PATCH] client: force sending cap revoke ack always 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 (cherry picked from commit 09a2e33c4aca6e72d75e2527ab5f467576d55dc8) --- src/client/Client.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/client/Client.cc b/src/client/Client.cc index a51516aa13e..fd4cb00add1 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -5715,6 +5715,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); -- 2.47.3