dirty_range used to have length = 1 byte.
This is good if whole extent is inside shard.
But this has proven not to be the case.
dirty_range(offset, length) is slower only when it crosses shard.
Partially fixes: https://tracker.ceph.com/issues/70390
Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
(cherry picked from commit
4f566eaf6c4646e513ea6747c7df17383d8716e2)
bluestore_blob_t& blob = e.blob->dirty_blob();
blob.clear_flag(bluestore_blob_t::FLAG_SHARED);
e.blob->get_dirty_shared_blob() = nullptr;
- h->extent_map.dirty_range(e.logical_offset, 1);
+ h->extent_map.dirty_range(e.logical_offset, e.length);
}
}
txc->write_onode(h);