void set_payload(bufferlist& bl) {
if (byte_throttler)
byte_throttler->put(payload.length());
- payload.claim(bl);
+ payload.claim(bl, buffer::list::CLAIM_ALLOW_NONSHAREABLE);
if (byte_throttler)
byte_throttler->take(payload.length());
}
void set_middle(bufferlist& bl) {
if (byte_throttler)
byte_throttler->put(payload.length());
- middle.claim(bl);
+ middle.claim(bl, buffer::list::CLAIM_ALLOW_NONSHAREABLE);
if (byte_throttler)
byte_throttler->take(payload.length());
}
bufferlist& get_middle() { return middle; }
- void set_data(const bufferlist &d) {
+ void set_data(const bufferlist &bl) {
if (byte_throttler)
byte_throttler->put(data.length());
- data = d;
+ data.share(bl);
if (byte_throttler)
byte_throttler->take(data.length());
}
bufferptr bp = buffer::create_static(pre_pad, zero_buf);
bl.push_back(bp);
}
- bl.claim_append(ebl);
+ bl.claim_append(ebl, buffer::list::CLAIM_ALLOW_NONSHAREABLE); // potential zero-copy
if (h.post_pad) {
bufferptr bp = buffer::create_static(post_pad, zero_buf);
TrackedOpRef tracked_op;
write_item(uint64_t s, bufferlist& b, int al, TrackedOpRef opref) :
seq(s), alignment(al), tracked_op(opref) {
- bl.claim(b);
+ bl.claim(b, buffer::list::CLAIM_ALLOW_NONSHAREABLE); // potential zero-copy
}
write_item() : seq(0), alignment(0) {}
};