]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore: link in LBAPin after read
authorSamuel Just <sjust@redhat.com>
Wed, 15 Jul 2020 23:47:08 +0000 (16:47 -0700)
committerSamuel Just <sjust@redhat.com>
Wed, 5 Aug 2020 06:17:55 +0000 (23:17 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/lba_manager.h
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h
src/crimson/os/seastore/transaction_manager.h

index 1604aef86e7bf7f61af48055687bde1740ed8056..a44f48fe96e2e4cf9726383a2f4072b2e6a4427e 100644 (file)
@@ -130,6 +130,8 @@ public:
     Transaction &t,
     CachedExtentRef e) = 0;
 
+  virtual void add_pin(LBAPin &pin) = 0;
+
   virtual ~LBAManager() {}
 };
 using LBAManagerRef = std::unique_ptr<LBAManager>;
index 6463c91b014ea03aab0409e87618517c2ed45029..4a01d7fe3a79daa6f0ed232a06f59ae9020d2e87 100644 (file)
@@ -87,6 +87,10 @@ public:
     Transaction &t,
     CachedExtentRef e) final;
 
+  void add_pin(LBAPin &pin) final {
+    pin_set.add_pin(reinterpret_cast<BtreeLBAPin*>(&pin)->pin);
+  }
+
 private:
   SegmentManager &segment_manager;
   Cache &cache;
index 149b7049618441d4b3b2c66f1ce98b6cbf448542..011d3d3b3842b8c3d77e4910165347c99a237268 100644 (file)
@@ -115,8 +115,11 @@ public:
            t,
            pin->get_paddr(),
            pin->get_length()
-         ).safe_then([&pin, &ret_ref](auto ref) mutable {
-           ref->set_pin(std::move(pin));
+         ).safe_then([this, &pin, &ret_ref](auto ref) mutable {
+           if (!ref->has_pin()) {
+             ref->set_pin(std::move(pin));
+             lba_manager.add_pin(ref->get_pin());
+           }
            ret_ref.push_back(std::make_pair(ref->get_laddr(), ref));
            crimson::get_logger(ceph_subsys_filestore).debug(
              "read_extents: got extent {}",