]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: still need set error code value in osd_op.rval 46012/head
authorchunmei-liu <chunmei.liu@intel.com>
Sat, 23 Apr 2022 08:59:31 +0000 (01:59 -0700)
committerchunmei-liu <chunmei.liu@intel.com>
Tue, 26 Apr 2022 02:43:24 +0000 (19:43 -0700)
Signed-off-by: chunmei-liu <chunmei.liu@intel.com>
src/crimson/osd/ops_executer.cc

index 81a7b50d2ce62d5faff9ec1dd2027caedd04f73c..90ae9ea514711f3c606fd3b4acc5d0d746a01d31 100644 (file)
@@ -476,14 +476,17 @@ OpsExecuter::call_errorator::future<> OpsExecuter::do_assert_ver(
 OpsExecuter::interruptible_errorated_future<OpsExecuter::osd_op_errorator>
 OpsExecuter::execute_op(OSDOp& osd_op)
 {
-  return (osd_op.op.flags & CEPH_OSD_OP_FLAG_FAILOK) ?
-    do_execute_op(osd_op).handle_error_interruptible(
-      crimson::ct_error::eagain::pass_further{},
-      crimson::ct_error::einprogress::pass_further{},
-      osd_op_errorator::all_same_way([] {
-        return osd_op_errorator::now();
-      }))
-    : do_execute_op(osd_op);
+  return do_execute_op(osd_op).handle_error_interruptible(
+    osd_op_errorator::all_same_way([&osd_op](auto e, auto&& e_raw)
+      -> OpsExecuter::osd_op_errorator::future<> {
+        osd_op.rval = -e.value();
+        if ((osd_op.op.flags & CEPH_OSD_OP_FLAG_FAILOK) &&
+         e.value() != EAGAIN && e.value() != EINPROGRESS) {
+          return osd_op_errorator::now();
+        } else {
+          return std::move(e_raw);
+       }
+      }));
 }
 
 OpsExecuter::interruptible_errorated_future<OpsExecuter::osd_op_errorator>