From 383ae788710b659919f9803410050cdd6ce72eac Mon Sep 17 00:00:00 2001 From: Ming-Hung Tsai Date: Tue, 2 Jun 2020 01:03:01 +0800 Subject: [PATCH] [thin_pool] Determine shared blocks while looking up mappings --- thin-provisioning/thin_pool.cc | 9 ++++++++- thin-provisioning/thin_pool.h | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/thin-provisioning/thin_pool.cc b/thin-provisioning/thin_pool.cc index 2ee2f42..302a5e9 100644 --- a/thin-provisioning/thin_pool.cc +++ b/thin-provisioning/thin_pool.cc @@ -60,7 +60,14 @@ thin::maybe_address thin::lookup(block_address thin_block) { uint64_t key[2] = {dev_, thin_block}; - return pool_.md_->mappings_->lookup(key); + mapping_tree::maybe_value m = pool_.md_->mappings_->lookup(key); + if (!m) + return thin::maybe_address(); + + lookup_result r; + r.block_ = m->block_; + r.shared_ = m->time_ < details_.snapshotted_time_; + return r; } bool diff --git a/thin-provisioning/thin_pool.h b/thin-provisioning/thin_pool.h index 4e05c1a..6151677 100644 --- a/thin-provisioning/thin_pool.h +++ b/thin-provisioning/thin_pool.h @@ -33,8 +33,13 @@ namespace thin_provisioning { class thin_pool; class thin { public: + struct lookup_result { + block_address block_; + bool shared_; + }; + typedef std::shared_ptr ptr; - typedef boost::optional maybe_address; + typedef boost::optional maybe_address; thin_dev_t get_dev_t() const; maybe_address lookup(block_address thin_block);