]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: In BlueFS::truncate accept wierd alloc_unit
authorAdam Kupczyk <akupczyk@ibm.com>
Tue, 11 Mar 2025 10:52:15 +0000 (10:52 +0000)
committerAdam Kupczyk <akupczyk@ibm.com>
Thu, 5 Jun 2025 08:55:39 +0000 (08:55 +0000)
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/71534
Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
(cherry picked from commit 0da7a2a58c207b97c9bcf4a1dfcd9d09f0e9b954)

src/os/bluestore/BlueFS.cc

index c45575019353d91cbc18bf5dd560e4402760a02a..59cae8dcfc7ab4d14b56f132fe10458c228babb0 100644 (file)
@@ -3867,10 +3867,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);