From: chunmei-liu Date: Tue, 11 Jan 2022 03:44:43 +0000 (-0800) Subject: crimson: fix assert_aligned(size) in trim_data_reservation X-Git-Tag: v17.1.0~89^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=7594b6182608d8961fe322de2c3d663107ea6da2;p=ceph-ci.git crimson: fix assert_aligned(size) in trim_data_reservation Signed-off-by: chunmei-liu signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/object_data_handler.cc b/src/crimson/os/seastore/object_data_handler.cc index 9bc90405c9c..583e6118768 100644 --- a/src/crimson/os/seastore/object_data_handler.cc +++ b/src/crimson/os/seastore/object_data_handler.cc @@ -308,12 +308,17 @@ ObjectDataHandler::clear_ret ObjectDataHandler::trim_data_reservation( pin.get_laddr() <= object_data.get_reserved_data_base() + size); auto pin_offset = pin.get_laddr() - object_data.get_reserved_data_base(); - if (pin.get_paddr().is_zero()) { + if ((pin.get_laddr() == (object_data.get_reserved_data_base() + size)) || + (pin.get_paddr().is_zero())) { + /* First pin is exactly at the boundary or is a zero pin. Either way, + * remove all pins and add a single zero pin to the end. */ to_write.emplace_back( pin.get_laddr(), object_data.get_reserved_data_len() - pin_offset); return clear_iertr::now(); } else { + /* First pin overlaps the boundary and has data, read in extent + * and rewrite portion prior to size */ return read_pin( ctx, pin.duplicate() @@ -548,6 +553,7 @@ ObjectDataHandler::truncate_ret ObjectDataHandler::truncate( context_t ctx, objaddr_t offset) { + offset = p2roundup(offset, ctx.tm.get_block_size()); return with_object_data( ctx, [this, ctx, offset](auto &object_data) {