From ffb256f9374c7189cf0c0692f9ef6f562d6a2155 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Wed, 18 Jun 2025 10:25:21 +0000 Subject: [PATCH] bluestore: Fix _setattr() with rare memory alignments Fix case bufferlist is length 0. Signed-off-by: Adam Kupczyk (cherry picked from commit e82bf6d0fd8bf4e461441a7e0cab87397043c754) --- src/os/bluestore/BlueStore.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index d76442e9a57..6ccf1201df2 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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); -- 2.39.5