]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
bluestore: Fix _setattr() with rare memory alignments 64300/head
authorAdam Kupczyk <akupczyk@ibm.com>
Wed, 18 Jun 2025 10:25:21 +0000 (10:25 +0000)
committerAlex Ainscow <aainscow@uk.ibm.com>
Wed, 2 Jul 2025 08:40:46 +0000 (09:40 +0100)
Fix case bufferlist is length 0.

Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
(cherry picked from commit e82bf6d0fd8bf4e461441a7e0cab87397043c754)

src/os/bluestore/BlueStore.cc

index d76442e9a57c00b512b46a4b0f6e728a230dc79f..6ccf1201df21603c2323d75032d1d9ba0cc0b60e 100644 (file)
@@ -18004,11 +18004,15 @@ int BlueStore::_setattr(TransContext *txc,
           << " " << name << " (" << val.length() << " bytes)"
           << dendl;
   int r = 0;
-
-  if (!val.is_contiguous() || val.front().is_partial()) {
-    val.rebuild();
+  auto& b = o->onode.attrs[name.c_str()];
+  if (val.length() == 0) {
+    b = bufferptr("", 0);
+  } else {
+    if (!val.is_contiguous() || val.front().is_partial()) {
+      val.rebuild();
+    }
+    b = val.front();
   }
-  auto& b = o->onode.attrs[name.c_str()] = val.front();
   b.reassign_to_mempool(mempool::mempool_bluestore_cache_meta);
 
   txc->write_onode(o);