From 737676bdb5c4c2b234e23399d23a74f029460b63 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 2 Oct 2024 18:26:04 -0700 Subject: [PATCH] crimson: track obcs unconditionally Previously, we only interrupted head obcs. I don't think that distinction actually makes sense -- both head and clone obcs can have ops blocked on the lock. Let's just track them all. Signed-off-by: Samuel Just --- src/crimson/osd/object_context_loader.cc | 18 ++++++------------ src/crimson/osd/object_context_loader.h | 2 +- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/crimson/osd/object_context_loader.cc b/src/crimson/osd/object_context_loader.cc index 1aa77b5a803..d2585c312ef 100644 --- a/src/crimson/osd/object_context_loader.cc +++ b/src/crimson/osd/object_context_loader.cc @@ -13,7 +13,7 @@ using crimson::common::local_conf; ObjectContextLoader::with_head_obc(const hobject_t& oid, with_obc_func_t&& func) { - return with_locked_obc( + return with_locked_obc( oid, [func=std::move(func)](auto obc) { // The template with_obc_func_t wrapper supports two obcs (head and clone). @@ -73,7 +73,7 @@ using crimson::common::local_conf; } clone_oid = *resolved_oid; } - return with_locked_obc( + return with_locked_obc( clone_oid, [head=std::move(head), func=std::move(func)](auto clone) { clone->set_clone_ssc(head->ssc); @@ -94,7 +94,7 @@ using crimson::common::local_conf; } } - template + template ObjectContextLoader::load_obc_iertr::future<> ObjectContextLoader::with_locked_obc(const hobject_t& oid, Func&& func) @@ -103,9 +103,7 @@ using crimson::common::local_conf; auto [obc, existed] = obc_registry.get_cached_obc(oid); DEBUGDPP("object {} existed {}", dpp, obc->get_oid(), existed); - if constexpr (track) { - obc->append_to(obc_set_accessing); - } + obc->append_to(obc_set_accessing); if (existed) { return obc->with_lock( [func=std::move(func), obc=ObjectContextRef(obc)] { @@ -113,9 +111,7 @@ using crimson::common::local_conf; } ).finally([FNAME, this, obc=ObjectContextRef(obc)] { DEBUGDPP("released object {}, {}", dpp, obc->get_oid(), obc->obs); - if constexpr (track) { - obc->remove_from(obc_set_accessing); - } + obc->remove_from(obc_set_accessing); }); } else { return obc->load_then_with_lock ( @@ -127,9 +123,7 @@ using crimson::common::local_conf; } ).finally([FNAME, this, obc=ObjectContextRef(obc)] { DEBUGDPP("released object {}, {}", dpp, obc->get_oid(), obc->obs); - if constexpr (track) { - obc->remove_from(obc_set_accessing); - } + obc->remove_from(obc_set_accessing); }); } } diff --git a/src/crimson/osd/object_context_loader.h b/src/crimson/osd/object_context_loader.h index 3a4381405fc..a16123e8b81 100644 --- a/src/crimson/osd/object_context_loader.h +++ b/src/crimson/osd/object_context_loader.h @@ -73,7 +73,7 @@ private: load_obc_iertr::future<> with_head_obc(const hobject_t& oid, with_obc_func_t&& func); - template + template load_obc_iertr::future<> with_locked_obc(const hobject_t& oid, Func&& func); -- 2.39.5