]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: check cap ID when handling cap export message 1714/head
authorYan, Zheng <zheng.z.yan@intel.com>
Mon, 21 Apr 2014 08:26:33 +0000 (16:26 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Wed, 23 Apr 2014 02:29:14 +0000 (10:29 +0800)
handle following sequence of events:
- mds0 exports an inode to mds1. client receives the cap import
  message from mds1. caps from mds0 are removed while handling
  the cap import message.
- mds1 exports an inode to mds0. client receives the cap export
  message from mds1. handle_cap_export() adds placeholder caps
  for mds0
- client receives the first cap export message (for exporting
  inode from mds0 to mds1)

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/client/Client.cc

index 688cc84cd7c960ca36baf8c12bba173fe1f1d5a9..03b6438b2174c45dc09ce09da91896edda5daec2 100644 (file)
@@ -3574,9 +3574,11 @@ void Client::handle_cap_export(MetaSession *session, Inode *in, MClientCaps *m)
   ldout(cct, 5) << "handle_cap_export ino " << m->get_ino() << " mseq " << m->get_mseq()
                << " EXPORT from mds." << mds << dendl;
 
-  if (in->caps.count(mds)) {
-    Cap *cap = in->caps[mds];
+  Cap *cap = NULL;
+  if (in->caps.count(mds))
+    cap = in->caps[mds];
 
+  if (cap && cap->cap_id == m->get_cap_id()) {
     if (m->peer.cap_id) {
       MetaSession *tsession = _get_or_open_mds_session(m->peer.mds);
       if (in->caps.count(m->peer.mds)) {