From 211e5644d9574dca3d96500a8f523cd6ebd6ef57 Mon Sep 17 00:00:00 2001 From: chunmei-liu Date: Thu, 7 Apr 2022 17:35:37 -0700 Subject: [PATCH] crimson: keep do_osd_ops_params_t alive when call do_osd_ops otherwise stack-under-overflow Signed-off-by: chunmei-liu --- src/crimson/osd/pg.cc | 19 +++++++++++-------- src/crimson/osd/pg.h | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index dadbc8dd54a..d51b939956e 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 776cdd63556..18aa9ede7b9 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 -- 2.47.3