From cdee9b928ff9a410e6e0f38aa791756829d68358 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Thu, 9 Nov 2023 09:39:23 +0000 Subject: [PATCH] crimson/osd/osd_operations/snaptrim_event: fix lifetime management The operation's id and future returned when starting SnapTrimObjSubEvent is emplaced into subop_blocker. Later on, we await the completion of all the started operations futures. Before this patch, we only stored the op id in the subop_blocker vector which allowed `op` to go out of scope and lose all its references (and get deleted) before exiting. Storing the operation as a reference instead of the id will maintain the SnapTrimObjSubEvent operation lifetime. Fixes: https://tracker.ceph.com/issues/63299 Signed-off-by: Matan Breizman --- src/crimson/osd/osd_operations/snaptrim_event.cc | 4 ++-- src/crimson/osd/osd_operations/snaptrim_event.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index ffd43d736ad3..21fd6e94da94 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -44,7 +44,7 @@ void SnapTrimEvent::SubOpBlocker::dump_detail(Formatter *f) const f->open_array_section("dependent_operations"); { for (const auto &kv : subops) { - f->dump_unsigned("op_id", kv.first); + f->dump_unsigned("op_id", kv.first->get_id()); } } f->close_section(); @@ -152,7 +152,7 @@ SnapTrimEvent::start() object, snapid); subop_blocker.emplace_back( - op->get_id(), + std::move(op), std::move(fut) ); } diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index afb24952a045..f7c512881de3 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -61,7 +61,7 @@ private: struct SubOpBlocker : crimson::BlockerT { static constexpr const char* type_name = "CompoundOpBlocker"; - using id_done_t = std::pair>; void dump_detail(Formatter *f) const final; -- 2.47.3