]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: fix message order check in handle_cap_export()
authorYan, Zheng <zyan@redhat.com>
Mon, 28 Aug 2017 09:13:31 +0000 (17:13 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 21 Sep 2017 03:34:22 +0000 (11:34 +0800)
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" <zyan@redhat.com>
(cherry picked from commit 3c31256a4addcc4eca30c62109e33f77224258c2)

src/client/Client.cc

index 1c22ea5fbf127c380b2241931ae0bd0e1932e545..47cc27295181c2fdb87ccb3df5e8b106ff74bd4d 100644 (file)
@@ -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;