]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tag MMDSMap with fsid
authorSage Weil <sage@newdream.net>
Thu, 10 Apr 2008 00:53:22 +0000 (17:53 -0700)
committerSage Weil <sage@newdream.net>
Thu, 10 Apr 2008 00:53:45 +0000 (17:53 -0700)
src/kernel/mds_client.c
src/mds/MDS.cc
src/messages/MMDSMap.h
src/mon/MDSMonitor.cc

index c34b7afe6372cc1ddf30134f479741df282e99ac..8b839f8a5fb73456a230dd6218ea257d40fdaa2e 100644 (file)
@@ -1627,8 +1627,15 @@ void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
        struct ceph_mdsmap *newmap, *oldmap;
        int from = le32_to_cpu(msg->hdr.src.name.num);
        int newstate;
+       struct ceph_fsid fsid;
 
-       ceph_decode_need(&p, end, 2*sizeof(__u32), bad);
+       ceph_decode_need(&p, end, sizeof(fsid)+2*sizeof(__u32), bad);
+       ceph_decode_64(&p, fsid.major);
+       ceph_decode_64(&p, fsid.minor);
+       if (!ceph_fsid_equal(&fsid, &mdsc->client->monc.monmap->fsid)) {
+               derr(0, "got mdsmap with wrong fsid\n");
+               return;
+       }
        ceph_decode_32(&p, epoch);
        ceph_decode_32(&p, maplen);
        dout(2, "handle_map epoch %u len %d\n", epoch, (int)maplen);
index 67c9242b7ebf2ea73e7eac63b098038a01b0f058..d9a21a3fac63d8180ac46c1b5eef440a650c4209 100644 (file)
@@ -237,7 +237,7 @@ void MDS::send_message_mds(Message *m, int mds)
 {
   // send mdsmap first?
   if (peer_mdsmap_epoch[mds] < mdsmap->get_epoch()) {
-    messenger->send_message(new MMDSMap(mdsmap), 
+    messenger->send_message(new MMDSMap(monmap->fsid, mdsmap), 
                            mdsmap->get_inst(mds));
     peer_mdsmap_epoch[mds] = mdsmap->get_epoch();
   }
@@ -659,7 +659,7 @@ void MDS::bcast_mds_map()
   for (set<Session*>::const_iterator p = clients.begin();
        p != clients.end();
        ++p) 
-    messenger->send_message(new MMDSMap(mdsmap), (*p)->inst);
+    messenger->send_message(new MMDSMap(monmap->fsid, mdsmap), (*p)->inst);
   last_client_mdsmap_bcast = mdsmap->get_epoch();
 }
 
index 064fa73705694a680f4aa2e2c7be7fb9b01e17ed..0ec0ae4149761ecdb7a263104b6dc881d5a5edf1 100644 (file)
@@ -44,7 +44,8 @@ class MMDSMap : public Message {
     return e;
   }
   */
-
+  
+  ceph_fsid fsid;
   epoch_t epoch;
   bufferlist encoded;
 
@@ -53,8 +54,9 @@ class MMDSMap : public Message {
 
   MMDSMap() : 
     Message(CEPH_MSG_MDS_MAP) {}
-  MMDSMap(MDSMap *mm) :
-    Message(CEPH_MSG_MDS_MAP) {
+  MMDSMap(ceph_fsid &f, MDSMap *mm) :
+    Message(CEPH_MSG_MDS_MAP),
+    fsid(f) {
     epoch = mm->get_epoch();
     mm->encode(encoded);
   }
@@ -67,10 +69,12 @@ class MMDSMap : public Message {
   // marshalling
   void decode_payload() {
     int off = 0;
+    ::_decode(fsid, payload, off);
     ::_decode(epoch, payload, off);
     ::_decode(encoded, payload, off);
   }
   void encode_payload() {
+    ::_encode(fsid, payload);
     ::_encode(epoch, payload);
     ::_encode(encoded, payload);
   }
index af942681bbab9439af15e8d70859190a0fa4ac9b..ed6dee857395d8656be2ff17e91f4982d164b2dd 100644 (file)
@@ -604,7 +604,7 @@ void MDSMonitor::bcast_latest_mds()
 void MDSMonitor::send_full(entity_inst_t dest)
 {
   dout(11) << "send_full to " << dest << dendl;
-  mon->messenger->send_message(new MMDSMap(&mdsmap), dest);
+  mon->messenger->send_message(new MMDSMap(mon->monmap->fsid, &mdsmap), dest);
 }
 
 void MDSMonitor::send_to_waiting()