Skip to content

Commit 5d64c9c

Browse files
committed
librbd: factor out prune_extents() from prune_parent_extents()
Signed-off-by: Ilya Dryomov <[email protected]>
1 parent b8db14c commit 5d64c9c

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

src/librbd/ImageCtx.cc

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -736,18 +736,7 @@ librados::IoCtx duplicate_io_ctx(librados::IoCtx& io_ctx) {
736736

737737
auto overlap = reduce_parent_overlap(raw_overlap, migration_write);
738738
if (area == overlap.second) {
739-
// drop extents completely beyond the overlap
740-
while (!image_extents.empty() &&
741-
image_extents.back().first >= overlap.first) {
742-
image_extents.pop_back();
743-
}
744-
if (!image_extents.empty()) {
745-
// trim final overlapping extent
746-
auto& last_extent = image_extents.back();
747-
if (last_extent.first + last_extent.second > overlap.first) {
748-
last_extent.second = overlap.first - last_extent.first;
749-
}
750-
}
739+
io::util::prune_extents(image_extents, overlap.first);
751740
} else if (area == io::ImageArea::DATA &&
752741
overlap.second == io::ImageArea::CRYPTO_HEADER) {
753742
// all extents completely beyond the overlap

src/librbd/io/Utils.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,21 @@ int clip_request(I* image_ctx, Extents* image_extents, ImageArea area) {
155155
return 0;
156156
}
157157

158+
void prune_extents(Extents& extents, uint64_t size) {
159+
// drop extents completely beyond size
160+
while (!extents.empty() && extents.back().first >= size) {
161+
extents.pop_back();
162+
}
163+
164+
if (!extents.empty()) {
165+
// trim final overlapping extent
166+
auto& last_extent = extents.back();
167+
if (last_extent.first + last_extent.second > size) {
168+
last_extent.second = size - last_extent.first;
169+
}
170+
}
171+
}
172+
158173
void unsparsify(CephContext* cct, ceph::bufferlist* bl,
159174
const Extents& extent_map, uint64_t bl_off,
160175
uint64_t out_bl_len) {

src/librbd/io/Utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ inline uint64_t get_extents_length(const Extents &extents) {
4646
return total_bytes;
4747
}
4848

49+
void prune_extents(Extents& extents, uint64_t size);
4950
void unsparsify(CephContext* cct, ceph::bufferlist* bl,
5051
const Extents& extent_map, uint64_t bl_off,
5152
uint64_t out_bl_len);

0 commit comments

Comments
 (0)