From: Samuel Just Date: Wed, 15 Jul 2020 23:47:08 +0000 (-0700) Subject: crimson/os/seastore: link in LBAPin after read X-Git-Tag: v16.1.0~1513^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F36148%2Fhead;p=ceph.git crimson/os/seastore: link in LBAPin after read Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/lba_manager.h b/src/crimson/os/seastore/lba_manager.h index 1604aef86e7bf..a44f48fe96e2e 100644 --- a/src/crimson/os/seastore/lba_manager.h +++ b/src/crimson/os/seastore/lba_manager.h @@ -130,6 +130,8 @@ public: Transaction &t, CachedExtentRef e) = 0; + virtual void add_pin(LBAPin &pin) = 0; + virtual ~LBAManager() {} }; using LBAManagerRef = std::unique_ptr; diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h index 6463c91b014ea..4a01d7fe3a79d 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h @@ -87,6 +87,10 @@ public: Transaction &t, CachedExtentRef e) final; + void add_pin(LBAPin &pin) final { + pin_set.add_pin(reinterpret_cast(&pin)->pin); + } + private: SegmentManager &segment_manager; Cache &cache; diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 149b704961844..011d3d3b3842b 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -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 {}",