From b9e71c261157bf0efd0d212a5b7ca71c14208b9c Mon Sep 17 00:00:00 2001 From: chunmei-liu Date: Mon, 4 Apr 2022 21:10:33 -0700 Subject: [PATCH] crimson: if do_cmp_xattr failed, cancel the following operations Signed-off-by: chunmei-liu --- src/crimson/osd/pg_backend.cc | 14 +++++++++----- src/crimson/osd/pg_backend.h | 4 +++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index fbd4dede290b6..6901528f9179e 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -980,7 +980,10 @@ PGBackend::cmp_xattr_ierrorator::future<> PGBackend::cmp_xattr( logger().debug("cmpxattr on obj={} for attr={}", os.oi.soid, name); return getxattr(os.oi.soid, std::move(name)).safe_then_interruptible( - [&delta_stats, &osd_op] (auto &&xattr) { + [&delta_stats, &osd_op] (auto &&xattr) -> cmp_xattr_ierrorator::future<> { + delta_stats.num_rd++; + delta_stats.num_rd_kb += shift_round_up(osd_op.op.xattr.value_len, 10); + int result = 0; auto bp = osd_op.indata.cbegin(); bp += osd_op.op.xattr.name_len; @@ -1014,12 +1017,13 @@ PGBackend::cmp_xattr_ierrorator::future<> PGBackend::cmp_xattr( } if (result == 0) { logger().info("cmp_xattr: comparison returned false"); - osd_op.rval = -ECANCELED; + return crimson::ct_error::ecanceled::make(); + } else if (result == -EINVAL) { + return crimson::ct_error::invarg::make(); } else { - osd_op.rval = result; + osd_op.rval = 1; + return cmp_xattr_ierrorator::now(); } - delta_stats.num_rd++; - delta_stats.num_rd_kb += shift_round_up(osd_op.op.xattr.value_len, 10); }); } diff --git a/src/crimson/osd/pg_backend.h b/src/crimson/osd/pg_backend.h index aa2fcee672ac8..60728d3af6da6 100644 --- a/src/crimson/osd/pg_backend.h +++ b/src/crimson/osd/pg_backend.h @@ -218,7 +218,9 @@ public: const ObjectState& os, OSDOp& osd_op, object_stat_sum_t& delta_stats) const; - using cmp_xattr_errorator = ::crimson::os::FuturizedStore::get_attr_errorator; + using cmp_xattr_errorator = get_attr_errorator::extend< + crimson::ct_error::ecanceled, + crimson::ct_error::invarg>; using cmp_xattr_ierrorator = ::crimson::interruptible::interruptible_errorator< ::crimson::osd::IOInterruptCondition, -- 2.39.5