From: Adam Kupczyk Date: Tue, 11 Mar 2025 10:52:15 +0000 (+0000) Subject: os/bluestore: In BlueFS::truncate accept wierd alloc_unit X-Git-Tag: testing/wip-pdonnell-testing-20250604.171440-debug~20^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=0da7a2a58c207b97c9bcf4a1dfcd9d09f0e9b954;p=ceph-ci.git os/bluestore: In BlueFS::truncate accept wierd alloc_unit The alignment of extents might not reflect current alloc_unit[bdev]. It might be caused be either fallback to alternate AU size for SLOW, or change of allocation unit in DB or WAL. In such cases, truncation just leaves extent untouched. Fixes: https://tracker.ceph.com/issues/71235 Signed-off-by: Adam Kupczyk --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 195dced51f3..a8f961074a5 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -4224,10 +4224,12 @@ int BlueFS::truncate(FileWriter *h, uint64_t offset)/*_WF_L*/ changed_extents = true; ++p; } else { - // cut_off > p->length means that we misaligned the extent - ceph_assert(cut_off == p->length); + // Usually cut_off == p->length. + // Case cut_off > p->length means that we misaligned the extent + // or alloc size changed in the meantime. + // In both cases just leave extent untouched. fnode.allocated = (offset - x_off) + p->length; - ++p; // leave extent untouched + ++p; } while (p != fnode.extents.end()) { dirty.pending_release[p->bdev].insert(p->offset, p->length);