]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix tmap when header update not specified, or initial object dne
authorSage Weil <sage@newdream.net>
Wed, 7 Apr 2010 23:35:06 +0000 (16:35 -0700)
committerSage Weil <sage@newdream.net>
Wed, 7 Apr 2010 23:35:06 +0000 (16:35 -0700)
src/osd/ReplicatedPG.cc

index f171f6bfc756f9d69ebbca723fd2b271288cc6dc..9092a9a7184fa69c0a6715092d687910353d5a16 100644 (file)
@@ -1261,11 +1261,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
       break;
 
 
-
       // -- trivial map --
     case CEPH_OSD_OP_TMAPGET:
       {
-       // write it
        vector<OSDOp> nops(1);
        OSDOp& newop = nops[0];
        newop.op.op = CEPH_OSD_OP_READ;
@@ -1383,8 +1381,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
        } else {
          // header
          bufferlist header;
+         __u32 nkeys = 0;
          if (ibl.length()) {
            ::decode(header, ip);
+           ::decode(nkeys, ip);
          }
          dout(10) << "tmapup header " << header.length() << dendl;
 
@@ -1393,14 +1393,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
            ::decode(header, bp);
            changed = true;
            dout(10) << "tmapup new header " << header.length() << dendl;
-         } else 
-           ++bp;
+         }
          
          ::encode(header, obl);
 
-         // key count
-         __u32 nkeys;
-         ::decode(nkeys, ip);
          dout(20) << "tmapup initial nkeys " << nkeys << dendl;
 
          // update keys