]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ErasureCodeJerasure: fix alignement issues in encode/decode
authorSamuel Just <sam.just@inktank.com>
Sat, 1 Feb 2014 04:07:26 +0000 (20:07 -0800)
committerSamuel Just <sam.just@inktank.com>
Mon, 17 Feb 2014 22:24:55 +0000 (14:24 -0800)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/erasure-code/jerasure/ErasureCodeJerasure.cc

index a39ffbeb3a5c8f7e6faacdb836728e502ba543c6..9200da25ea7c0500df23cb8b2390ef62b49cae3a 100644 (file)
@@ -113,11 +113,11 @@ int ErasureCodeJerasure::encode(const set<int> &want_to_encode,
     bufferptr pad(padded_length - in.length());
     pad.zero();
     out.push_back(pad);
-    out.rebuild_page_aligned();
   }
   unsigned coding_length = blocksize * m;
   bufferptr coding(buffer::create_page_aligned(coding_length));
   out.push_back(coding);
+  out.rebuild_page_aligned();
   char *chunks[k + m];
   for (int i = 0; i < k + m; i++) {
     bufferlist &chunk = (*encoded)[i];
@@ -145,10 +145,11 @@ int ErasureCodeJerasure::decode(const set<int> &want_to_read,
     if (chunks.find(i) == chunks.end()) {
       erasures[erasures_count] = i;
       erasures_count++;
-      bufferptr ptr(blocksize);
+      bufferptr ptr(buffer::create_page_aligned(blocksize));
       (*decoded)[i].push_front(ptr);
     } else {
       (*decoded)[i] = chunks.find(i)->second;
+      (*decoded)[i].rebuild_page_aligned();
     }
     if (i < k)
       data[i] = (*decoded)[i].c_str();