From: Yan, Zheng Date: Mon, 28 Aug 2017 09:13:31 +0000 (+0800) Subject: client: fix message order check in handle_cap_export() X-Git-Tag: v12.2.1~9^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=25def78ceb4cb17c97ae911203a62fb410cd9399;p=ceph.git client: fix message order check in handle_cap_export() If importer mds' cap already exists, but cap ID mismatches, client should have received corresponding import message (the imported caps got released later). Because cap ID does not change as long as client holds the caps. Signed-off-by: "Yan, Zheng" (cherry picked from commit 3c31256a4addcc4eca30c62109e33f77224258c2) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 1c22ea5fbf12..47cc27295181 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -4770,7 +4770,7 @@ void Client::handle_cap_export(MetaSession *session, Inode *in, MClientCaps *m) MetaSession *tsession = _get_or_open_mds_session(peer_mds); if (in->caps.count(peer_mds)) { Cap *tcap = in->caps[peer_mds]; - if (tcap->cap_id != m->peer.cap_id || + if (tcap->cap_id == m->peer.cap_id && ceph_seq_cmp(tcap->seq, m->peer.seq) < 0) { tcap->cap_id = m->peer.cap_id; tcap->seq = m->peer.seq - 1;