From 2da0c7b97c1234a82eeb4c9c22e3806ab1ad44e3 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Tue, 22 Feb 2022 17:43:25 +0800 Subject: [PATCH] crimson/os/seastore/backref: prevent backref extents from causing transaction conflicts Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/backref/backref_tree_node.h | 8 ++++++++ src/crimson/os/seastore/cache.cc | 5 +++++ src/crimson/os/seastore/cached_extent.h | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/src/crimson/os/seastore/backref/backref_tree_node.h b/src/crimson/os/seastore/backref/backref_tree_node.h index 81977462da110..316787830a1c4 100644 --- a/src/crimson/os/seastore/backref/backref_tree_node.h +++ b/src/crimson/os/seastore/backref/backref_tree_node.h @@ -65,6 +65,10 @@ public: extent_types_t get_type() const final { return TYPE; } + + bool may_conflict() const final { + return false; + } }; using BackrefInternalNodeRef = BackrefInternalNode::Ref; @@ -86,6 +90,10 @@ public: return TYPE; } + bool may_conflict() const final { + return false; + } + const_iterator insert( const_iterator iter, paddr_t key, diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index c037c062526ad..5b031457f2cb6 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -718,6 +718,11 @@ void Cache::invalidate_extent( Transaction& t, CachedExtent& extent) { + if (!extent.may_conflict()) { + assert(extent.transactions.empty()); + return; + } + LOG_PREFIX(Cache::invalidate_extent); bool do_conflict_log = true; for (auto &&i: extent.transactions) { diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 1ec2b2fd8cd50..f0b88133d3e77 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -192,6 +192,10 @@ public: return false; } + virtual bool may_conflict() const { + return true; + } + friend std::ostream &operator<<(std::ostream &, extent_state_t); virtual std::ostream &print_detail(std::ostream &out) const { return out; } std::ostream &print(std::ostream &out) const { -- 2.39.5