dout(10) << "encode adjusted buffer length from " << in.length()
<< " to " << padded_length << dendl;
assert(padded_length % k == 0);
- unsigned blocksize = padded_length / k;
- unsigned length = blocksize * ( k + m );
bufferlist out(in);
- bufferptr pad(length - in.length());
- pad.zero(0, padded_length - in.length());
- out.push_back(pad);
+ if (padded_length - in.length() > 0) {
+ bufferptr pad(padded_length - in.length());
+ pad.zero();
+ out.push_back(pad);
+ out.rebuild_page_aligned();
+ }
+ unsigned blocksize = padded_length / k;
+ unsigned coding_length = blocksize * m;
+ bufferptr coding(buffer::create_page_aligned(coding_length));
+ out.push_back(coding);
char *chunks[k + m];
for (int i = 0; i < k + m; i++) {
bufferlist &chunk = (*encoded)[i];