From: Xiubo Li Date: Wed, 28 Jun 2023 13:59:53 +0000 (+0800) Subject: client: force sending cap revoke ack always X-Git-Tag: v19.0.0~893^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=09a2e33c4aca6e72d75e2527ab5f467576d55dc8;p=ceph.git 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 --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 83885a980e3f..4ed12c30a7d7 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -5827,6 +5827,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);