From: chunmei-liu Date: Fri, 8 Apr 2022 00:35:37 +0000 (-0700) Subject: crimson: keep do_osd_ops_params_t alive when call do_osd_ops X-Git-Tag: v18.0.0~1084^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=211e5644d9574dca3d96500a8f523cd6ebd6ef57;p=ceph.git crimson: keep do_osd_ops_params_t alive when call do_osd_ops otherwise stack-under-overflow Signed-off-by: chunmei-liu --- diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index dadbc8dd54a5..d51b939956e2 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -810,17 +810,20 @@ PG::do_osd_ops( ObjectContextRef obc, std::vector& ops, const OpInfo &op_info, - const do_osd_ops_params_t& msg_params, + const do_osd_ops_params_t &&msg_params, do_osd_ops_success_func_t success_func, do_osd_ops_failure_func_t failure_func) { - return do_osd_ops_execute( - seastar::make_lw_shared( - Ref{this}, std::move(obc), op_info, msg_params), - ops, - std::as_const(op_info), - std::move(success_func), - std::move(failure_func)); + return seastar::do_with(std::move(msg_params), [=, &ops, &op_info] + (auto &msg_params) { + return do_osd_ops_execute( + seastar::make_lw_shared( + Ref{this}, std::move(obc), op_info, msg_params), + ops, + std::as_const(op_info), + std::move(success_func), + std::move(failure_func)); + }); } PG::interruptible_future> PG::do_pg_ops(Ref m) diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 776cdd635565..18aa9ede7b93 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -592,7 +592,7 @@ private: ObjectContextRef obc, std::vector& ops, const OpInfo &op_info, - const do_osd_ops_params_t& params, + const do_osd_ops_params_t &¶ms, do_osd_ops_success_func_t success_func, do_osd_ops_failure_func_t failure_func); template