]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/transaction: remove delayed_set
authorSamuel Just <sjust@redhat.com>
Fri, 3 Sep 2021 20:22:46 +0000 (20:22 +0000)
committerSamuel Just <sjust@redhat.com>
Mon, 13 Sep 2021 20:02:36 +0000 (13:02 -0700)
delayed_set isn't necessary.  Delayed extents have distinct paddr segments
already, so it's simpler to have a single index for all pending extents.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h
src/crimson/os/seastore/transaction.h

index 2cad75a77214c1460e254600ad067ac76d49cf08..48a0c27bb691c3e397a0582e2f7d0d1c1c0e6bc1 100644 (file)
@@ -393,8 +393,9 @@ public:
 
   void mark_delayed_extent_ool(
     Transaction& t,
-    LogicalCachedExtentRef& ref) {
-    t.mark_delayed_extent_ool(ref);
+    LogicalCachedExtentRef& ref,
+    paddr_t final_addr) {
+    t.mark_delayed_extent_ool(ref, final_addr);
   }
 
   /**
index adf8496f485ab25c3ab55c46fe1b5851ce55ed2d..9b069138d73374a3619836d2a0ed9de6a76d96f4 100644 (file)
@@ -56,10 +56,9 @@ SegmentedAllocator::Writer::finish_write(
       lextent->get_paddr(),
       ool_extent.get_ool_paddr()
     ).si_then([&ool_extent, &t, &lextent, this] {
-      ool_extent.persist_paddr();
       lextent->backend_type = device_type_t::NONE;
       lextent->hint = {};
-      cache.mark_delayed_extent_ool(t, lextent);
+      cache.mark_delayed_extent_ool(t, lextent, ool_extent.get_ool_paddr());
       return finish_record_iertr::now();
     });
   }).si_then([&record] {
index 29e590b0d20ffa21ab5e3b93ee782fdd21f7c5db..4f0f646c8006745f82b952c5b57c0542fa171ba0 100644 (file)
@@ -34,10 +34,6 @@ class ool_record_t {
     paddr_t get_ool_paddr() const {
       return ool_offset;
     }
-    void persist_paddr() {
-      lextent->set_paddr(ool_offset);
-      ool_offset = P_ADDR_NULL;
-    }
     bufferptr& get_bptr() {
       return lextent->get_bptr();
     }
index a21beb846400c67ec07094b7fd57cef61e1764ce..34d1b10ba0d10fa7cb91922dc8e644fe81f2cfc0 100644 (file)
@@ -46,11 +46,6 @@ public:
       if (out)
        *out = CachedExtentRef(&*iter);
       return get_extent_ret::PRESENT;
-    } else if (auto iter = delayed_set.find_offset(addr);
-       iter != delayed_set.end()) {
-      if (out)
-       *out = CachedExtentRef(&*iter);
-      return get_extent_ret::PRESENT;
     } else if (
       auto iter = read_set.find(addr);
       iter != read_set.end()) {
@@ -68,16 +63,7 @@ public:
   void add_to_retired_set(CachedExtentRef ref) {
     ceph_assert(!is_weak());
     if (ref->is_initial_pending()) {
-      // We decide not to remove it from fresh_block_list because touching this
-      // will affect relative paddrs, and it should be rare to retire a fresh
-      // extent.
       ref->state = CachedExtent::extent_state_t::INVALID;
-      if (ref->is_inline()) {
-       write_set.erase(*ref);
-      } else {
-       // if ref is not relative, it must be in the delayed set
-       delayed_set.erase(*ref);
-      }
     } else if (ref->is_mutation_pending()) {
       ref->state = CachedExtent::extent_state_t::INVALID;
       write_set.erase(*ref);
@@ -109,27 +95,27 @@ public:
       ref->set_paddr(delayed_temp_paddr(delayed_temp_offset));
       delayed_temp_offset += ref->get_length();
       delayed_alloc_list.emplace_back(ref->cast<LogicalCachedExtent>());
-      delayed_set.insert(*ref);
     } else {
       ref->set_paddr(make_record_relative_paddr(offset));
       offset += ref->get_length();
       fresh_block_list.push_back(ref);
-      write_set.insert(*ref);
     }
+    write_set.insert(*ref);
   }
 
   void mark_delayed_extent_inline(LogicalCachedExtentRef& ref) {
+    write_set.erase(*ref);
     ref->set_paddr(make_record_relative_paddr(offset));
     offset += ref->get_length();
-    delayed_set.erase(*ref);
     fresh_block_list.push_back(ref);
     write_set.insert(*ref);
   }
 
-  void mark_delayed_extent_ool(LogicalCachedExtentRef& ref) {
+  void mark_delayed_extent_ool(LogicalCachedExtentRef& ref, paddr_t final_addr) {
+    write_set.erase(*ref);
+    ref->set_paddr(final_addr);
     assert(!ref->get_paddr().is_null());
     assert(!ref->is_inline());
-    delayed_set.erase(*ref);
     fresh_block_list.push_back(ref);
     write_set.insert(*ref);
   }
@@ -231,7 +217,6 @@ public:
   ~Transaction() {
     on_destruct(*this);
     write_set.clear_and_dispose(cached_extent_disposer());
-    delayed_set.clear_and_dispose(cached_extent_disposer());
   }
 
   friend class crimson::os::seastore::SeaStore;
@@ -243,7 +228,6 @@ public:
     delayed_temp_offset = 0;
     read_set.clear();
     write_set.clear_and_dispose(cached_extent_disposer());
-    delayed_set.clear_and_dispose(cached_extent_disposer());
     fresh_block_list.clear();
     mutated_block_list.clear();
     delayed_alloc_list.clear();
@@ -296,8 +280,6 @@ private:
 
   read_set_t<Transaction> read_set; ///< set of extents read by paddr
   ExtentIndex write_set;            ///< set of extents written by paddr
-  ExtentIndex delayed_set;         ///< set of extents whose paddr
-                                   ///  allocation are delayed
 
   std::list<CachedExtentRef> fresh_block_list;   ///< list of fresh blocks
   std::list<CachedExtentRef> mutated_block_list; ///< list of mutated blocks