From: Sun Yuechi Date: Wed, 1 Jul 2026 04:46:22 +0000 (+0800) Subject: crimson/osd/ec_backend: add missing break in transaction translation X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=853968f367dc148c6036167fc2e8621adf47ad44;p=ceph.git crimson/osd/ec_backend: add missing break in transaction translation ECCrimsonOp::transate_transaction() lacked a break after OP_OMAP_CLEAR and OP_CLONERANGE2, so both cases fell through to the next one. OP_OMAP_CLEAR fell into OP_OMAP_SETKEYS, which decodes an attrset from the transaction iterator that OP_OMAP_CLEAR never encoded, corrupting the decode stream for every following op. OP_CLONERANGE2 fell into OP_CLONE; clone_range() had already marked the destination op non-empty, so the following clone() trips ceph_assert(op.is_none() || op.is_delete()). Signed-off-by: Sun Yuechi --- diff --git a/src/crimson/osd/ec_backend.cc b/src/crimson/osd/ec_backend.cc index 4ce37c77920..dec93eaf087 100644 --- a/src/crimson/osd/ec_backend.cc +++ b/src/crimson/osd/ec_backend.cc @@ -160,6 +160,7 @@ struct ECCrimsonOp : ECCommon::RMWPipeline::Op { break; case ceph::os::Transaction::OP_OMAP_CLEAR: t_pg->omap_clear(i.get_oid(op->oid).hobj); + break; case ceph::os::Transaction::OP_OMAP_SETKEYS: { std::map aset; @@ -211,6 +212,7 @@ struct ECCrimsonOp : ECCommon::RMWPipeline::Op { op->off, op->len, op->dest_off); + break; case ceph::os::Transaction::OP_CLONE: t_pg->clone(i.get_oid(op->dest_oid).hobj, i.get_oid(op->oid).hobj); break;