From 7594b6182608d8961fe322de2c3d663107ea6da2 Mon Sep 17 00:00:00 2001 From: chunmei-liu Date: Mon, 10 Jan 2022 19:44:43 -0800 Subject: [PATCH] crimson: fix assert_aligned(size) in trim_data_reservation Signed-off-by: chunmei-liu signed-off-by: Samuel Just --- src/crimson/os/seastore/object_data_handler.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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) {