From 07756ec06ed4f2f39b25a4c024d4793a2fe959a8 Mon Sep 17 00:00:00 2001 From: Chunmei Liu Date: Sun, 20 Mar 2022 23:14:17 -0700 Subject: [PATCH] crimson:return read error code in MOSDOpReply Signed-off-by: Chunmei Liu --- src/crimson/osd/pg.cc | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 19a15331217..1efb388b393 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -753,12 +753,20 @@ PG::do_osd_ops( Ref{this}, obc, op_info, *m), m->ops, op_info, - [this, m, obc, may_write = op_info.may_write(), rvec = op_info.allows_returnvec()] { + [this, m, obc, may_write = op_info.may_write(), + may_read = op_info.may_read(), rvec = op_info.allows_returnvec()] { // TODO: should stop at the first op which returns a negative retval, // cmpext uses it for returning the index of first unmatched byte int result = m->ops.empty() ? 0 : m->ops.back().rval.code; - if (result > 0 && may_write && !rvec) { - result = 0; + if (may_read && result >= 0) { + for (auto &osdop : m->ops) { + if (osdop.rval < 0 && !(osdop.op.flags & CEPH_OSD_OP_FLAG_FAILOK)) { + result = osdop.rval.code; + break; + } + } + } else if (result > 0 && may_write && !rvec) { + result = 0; } auto reply = crimson::make_message(m.get(), result, -- 2.39.5