i.second.truncate->first < projected_size) {
if (!(sinfo.logical_offset_is_stripe_aligned(
i.second.truncate->first))) {
- plan.to_read[i.first].insert(
+ plan.to_read[i.first].union_insert(
sinfo.logical_to_prev_stripe_offset(i.second.truncate->first),
sinfo.get_stripe_width());
ldpp_dout(dpp, 20) << __func__ << ": unaligned truncate" << dendl;
- will_write.insert(
+ will_write.union_insert(
sinfo.logical_to_prev_stripe_offset(i.second.truncate->first),
sinfo.get_stripe_width());
}
i.second.truncate->first);
}
+ extent_set raw_write_set;
for (auto &&extent: i.second.buffer_updates) {
using BufferUpdate = PGTransaction::ObjectOperation::BufferUpdate;
if (boost::get<BufferUpdate::CloneRange>(&(extent.get_val()))) {
0 ==
"CloneRange is not allowed, do_op should have returned ENOTSUPP");
}
+ raw_write_set.insert(extent.get_off(), extent.get_len());
+ }
+ for (auto extent = raw_write_set.begin();
+ extent != raw_write_set.end();
+ ++extent) {
uint64_t head_start =
- sinfo.logical_to_prev_stripe_offset(extent.get_off());
+ sinfo.logical_to_prev_stripe_offset(extent.get_start());
uint64_t head_finish =
- sinfo.logical_to_next_stripe_offset(extent.get_off());
+ sinfo.logical_to_next_stripe_offset(extent.get_start());
if (head_start > projected_size) {
head_start = projected_size;
}
head_start < projected_size) {
assert(head_finish <= projected_size);
assert(head_finish - head_start == sinfo.get_stripe_width());
- plan.to_read[i.first].insert(
+ plan.to_read[i.first].union_insert(
head_start, sinfo.get_stripe_width());
}
uint64_t tail_start =
sinfo.logical_to_prev_stripe_offset(
- extent.get_off() + extent.get_len());
+ extent.get_start() + extent.get_len());
uint64_t tail_finish =
sinfo.logical_to_next_stripe_offset(
- extent.get_off() + extent.get_len());
+ extent.get_start() + extent.get_len());
if (tail_start != tail_finish &&
(head_start == head_finish || tail_start != head_start) &&
tail_start < projected_size) {
assert(tail_finish <= projected_size);
assert(tail_finish - tail_start == sinfo.get_stripe_width());
- plan.to_read[i.first].insert(
+ plan.to_read[i.first].union_insert(
tail_start, sinfo.get_stripe_width());
}
sinfo.logical_offset_is_stripe_aligned(
tail_finish - head_start)
);
- will_write.insert(
+ will_write.union_insert(
head_start, tail_finish - head_start);
if (tail_finish > projected_size)
projected_size = tail_finish;
ldpp_dout(dpp, 20) << __func__ << ": truncating out to "
<< truncating_to
<< dendl;
- will_write.insert(projected_size, truncating_to - projected_size);
+ will_write.union_insert(projected_size, truncating_to - projected_size);
projected_size = truncating_to;
}