]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: decode superblock properly
authorSage Weil <sage@newdream.net>
Thu, 20 Nov 2008 21:54:34 +0000 (13:54 -0800)
committerSage Weil <sage@newdream.net>
Thu, 20 Nov 2008 21:54:54 +0000 (13:54 -0800)
src/osd/OSD.cc

index acccd4bd75c425699bb425433099cd67a34d9d98..e64a8f7db0d6ca23b3c3c1c6321a8d0590a68b82 100644 (file)
@@ -373,6 +373,15 @@ int OSD::init()
     return -1;
   }
   
+  // load up "current" osdmap
+  assert(!osdmap);
+  osdmap = new OSDMap;
+  if (superblock.current_epoch) {
+    bufferlist bl;
+    get_map_bl(superblock.current_epoch, bl);
+    osdmap->decode(bl);
+  }
+
   // load up pgs (as they previously existed)
   load_pgs();
   
@@ -533,7 +542,8 @@ int OSD::read_superblock()
     return -1;
   }
 
-  bl.copy(0, sizeof(superblock), (char*)&superblock);
+  bufferlist::iterator p = bl.begin();
+  ::decode(superblock, p);
 
   dout(10) << "read_superblock " << superblock << dendl;
 
@@ -548,15 +558,6 @@ int OSD::read_superblock()
     return -1;
   }
   
-  // load up "current" osdmap
-  assert(!osdmap);
-  osdmap = new OSDMap;
-  if (superblock.current_epoch) {
-    bl.clear();
-    get_map_bl(superblock.current_epoch, bl);
-    osdmap->decode(bl);
-  }
-
   return 0;
 }