OSDOp *osd_op;
object_copy_data_t reply_obj;
bool classic;
+ size_t len;
C_CopyFrom_AsyncReadCb(OSDOp *osd_op, bool classic) :
- osd_op(osd_op), classic(classic) {}
+ osd_op(osd_op), classic(classic), len(0) {}
void finish(int r) {
+ assert(len > 0);
+ assert(len <= reply_obj.data.length());
+ bufferlist bl;
+ bl.substr_of(reply_obj.data, 0, len);
+ reply_obj.data.swap(bl);
if (classic) {
reply_obj.encode_classic(osd_op->outdata);
} else {
make_pair(cursor.data_offset, left),
make_pair(&bl, cb)));
result = MIN(oi.size - cursor.data_offset, (uint64_t)left);
+ cb->len = result;
} else {
result = pgbackend->objects_read_sync(
oi.soid, cursor.data_offset, left, &bl);