From cae12eccddf0499f9c4dffa75ee23fd4b088ffb3 Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Thu, 11 Jun 2026 11:33:42 +0000 Subject: [PATCH] crimson/osd: fix PGBackend::remove() to return ENOENT on no-op deletes PGBackend::remove() was returning success when asked to delete a non-existent object or an already-whiteout object that must remain a whiteout. The classic OSD returns -ENOENT in both cases. Fix both paths to return enoent, and remove the duplicate !os.exists check. Fixes: https://tracker.ceph.com/issues/76529 Signed-off-by: Ronen Friedman --- src/crimson/osd/pg_backend.cc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index b8971b2be2b..6a2e57d0992 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -1021,17 +1021,13 @@ PGBackend::remove(ObjectState& os, ceph::os::Transaction& txn, bool whiteout, int num_bytes) { - if (!os.exists) { - return crimson::ct_error::enoent::make(); - } - if (!os.exists) { logger().debug("{} {} does not exist",__func__, os.oi.soid); - return seastar::now(); + return crimson::ct_error::enoent::make(); } if (whiteout && os.oi.is_whiteout()) { logger().debug("{} whiteout set on {} ",__func__, os.oi.soid); - return seastar::now(); + return crimson::ct_error::enoent::make(); } txn.remove(coll->get_cid(), ghobject_t{os.oi.soid, ghobject_t::NO_GEN, get_shard()}); -- 2.47.3