From: Kautilya Tripathi Date: Mon, 16 Feb 2026 05:00:10 +0000 (+0530) Subject: crimson/osd: fix get_xattrs handling for RGW delete X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=08d257c043bd674dbe63401bdfe3b71836adb22a;p=ceph.git crimson/osd: fix get_xattrs handling for RGW delete Fix corrupted xattr values returned by get_xattrs by moving each value independently and tracking total_len correctly. Signed-off-by: Kautilya Tripathi --- diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index fe7b9fdc2d1c..f3c9c1cc9f36 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -1198,16 +1198,16 @@ PGBackend::get_attr_ierrorator::future<> PGBackend::get_xattrs( return get_attrs_maybe_from_cache().safe_then( [&delta_stats, &osd_op](auto&& attrs) { std::vector> user_xattrs; - ceph::bufferlist bl; + uint64_t total_len = 0; for (auto& [key, val] : attrs) { if (key.size() > 1 && key[0] == '_') { - bl.append(std::move(val)); - user_xattrs.emplace_back(key.substr(1), std::move(bl)); + total_len += val.length(); + user_xattrs.emplace_back(key.substr(1), std::move(val)); } } ceph::encode(user_xattrs, osd_op.outdata); delta_stats.num_rd++; - delta_stats.num_rd_kb += shift_round_up(bl.length(), 10); + delta_stats.num_rd_kb += shift_round_up(total_len, 10); return get_attr_errorator::now(); }); }