From 8fbbb1a9285f7131bd2bb67cb0f3a00b2ee162c5 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 9 Sep 2021 18:07:31 -0700 Subject: [PATCH] crimson/so/seastore: clarify ExtentIndex clear() ExtentIndex::clear() needs to handle clearing parent_index. Signed-off-by: Samuel Just --- src/crimson/os/seastore/cached_extent.h | 13 ++++++------- src/crimson/os/seastore/transaction.h | 16 ++++++++-------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index a72d5166339b9..56a1d4361ace3 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -550,14 +550,13 @@ public: ); } - template - void clear_and_dispose(Disposer disposer) { - extent_index.clear_and_dispose(disposer); - bytes = 0; - } - void clear() { - extent_index.clear(); + struct cached_extent_disposer { + void operator() (CachedExtent* extent) { + extent->parent_index = nullptr; + } + }; + extent_index.clear_and_dispose(cached_extent_disposer()); bytes = 0; } diff --git a/src/crimson/os/seastore/transaction.h b/src/crimson/os/seastore/transaction.h index 34d1b10ba0d10..99920916e641d 100644 --- a/src/crimson/os/seastore/transaction.h +++ b/src/crimson/os/seastore/transaction.h @@ -24,12 +24,6 @@ class Transaction; * Representation of in-progress mutation. Used exclusively through Cache methods. */ class Transaction { - struct cached_extent_disposer { - void operator() (CachedExtent* extent) { - extent->parent_index = nullptr; - extent->state = CachedExtent::extent_state_t::INVALID; - } - }; public: using Ref = std::unique_ptr; using on_destruct_func_t = std::function; @@ -213,10 +207,16 @@ public: src(src) {} + void invalidate_clear_write_set() { + for (auto &&i: write_set) { + i.state = CachedExtent::extent_state_t::INVALID; + } + write_set.clear(); + } ~Transaction() { on_destruct(*this); - write_set.clear_and_dispose(cached_extent_disposer()); + invalidate_clear_write_set(); } friend class crimson::os::seastore::SeaStore; @@ -227,7 +227,7 @@ public: offset = 0; delayed_temp_offset = 0; read_set.clear(); - write_set.clear_and_dispose(cached_extent_disposer()); + invalidate_clear_write_set(); fresh_block_list.clear(); mutated_block_list.clear(); delayed_alloc_list.clear(); -- 2.39.5