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: v20.1.0~197^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F63752%2Fhead;p=ceph.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/71533 Signed-off-by: Adam Kupczyk (cherry picked from commit 0da7a2a58c207b97c9bcf4a1dfcd9d09f0e9b954) --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 4972518d4b6..e364c4a4e6c 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);