From 084ac4b9500d896deb4ed1a6b7b1ffd54b14ff4a Mon Sep 17 00:00:00 2001 From: Ming-Hung Tsai Date: Sat, 20 Jun 2020 00:04:01 +0800 Subject: [PATCH 1/3] [io_generator] Simplify the class interface --- base/io_generator.cc | 13 +++++-------- base/io_generator.h | 3 +-- thin-provisioning/thin_generate_mappings.cc | 4 +--- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/base/io_generator.cc b/base/io_generator.cc index 0543d31..a808a6c 100644 --- a/base/io_generator.cc +++ b/base/io_generator.cc @@ -115,8 +115,7 @@ namespace { class base_io_generator: public io_generator { public: base_io_generator(io_generator_options const &opts); - virtual bool has_next(); - virtual void next(base::io &next_io); + virtual bool next(base::io &next_io); private: offset_generator::ptr @@ -140,19 +139,17 @@ namespace { io_size_total_(opts.io_size_) { } - bool base_io_generator::has_next() { - return io_size_finished_ < io_size_total_; - } - - void base_io_generator::next(base::io &next_io) { + bool base_io_generator::next(base::io &next_io) { if (io_size_finished_ >= io_size_total_) - throw std::runtime_error(""); + return false; next_io.op_ = op_gen_->next_op(); next_io.sector_ = offset_gen_->next_offset(); next_io.size_ = block_size_; io_size_finished_ += block_size_; + + return true; } offset_generator::ptr diff --git a/base/io_generator.h b/base/io_generator.h index 4a33550..16a78d9 100644 --- a/base/io_generator.h +++ b/base/io_generator.h @@ -42,8 +42,7 @@ namespace base { public: typedef std::shared_ptr ptr; - virtual bool has_next() = 0; - virtual void next(base::io &next_io) = 0; + virtual bool next(base::io &next_io) = 0; }; io_generator::ptr diff --git a/thin-provisioning/thin_generate_mappings.cc b/thin-provisioning/thin_generate_mappings.cc index a366eba..97402ce 100644 --- a/thin-provisioning/thin_generate_mappings.cc +++ b/thin-provisioning/thin_generate_mappings.cc @@ -93,10 +93,8 @@ namespace { io_generator::ptr gen = create_io_generator(opts); base::io io; - while (gen->has_next()) { + while (gen->next(io)) { // TODO: support io.size_ - gen->next(io); - switch (io.op_) { case base::REQ_OP_READ: process_read(td, pool, io.sector_); From 8006e1817388b55489cbdff222015505a379d347 Mon Sep 17 00:00:00 2001 From: Ming-Hung Tsai Date: Mon, 22 Jun 2020 15:01:25 +0800 Subject: [PATCH 2/3] [thin_pool] Fix the number of mapped blocks --- thin-provisioning/thin_pool.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/thin-provisioning/thin_pool.cc b/thin-provisioning/thin_pool.cc index 3bdc9e7..3a34ba8 100644 --- a/thin-provisioning/thin_pool.cc +++ b/thin-provisioning/thin_pool.cc @@ -72,13 +72,16 @@ thin::insert(block_address thin_block, block_address data_block) { uint64_t key[2] = {dev_, thin_block}; - ++details_.mapped_blocks_; - changed_ = true; - mapping_tree_detail::block_time bt; bt.block_ = data_block; bt.time_ = pool_.get_time(); - return pool_.md_->mappings_->insert(key, bt); + bool inserted = pool_.md_->mappings_->insert(key, bt); + + changed_ = true; + if (inserted) + ++details_.mapped_blocks_; + + return inserted; } void From 19e482fd2f8256f4d77d77aad9b0f190662bbaee Mon Sep 17 00:00:00 2001 From: Ming-Hung Tsai Date: Mon, 22 Jun 2020 23:52:42 +0800 Subject: [PATCH 3/3] [thin_generate_mappings] Update help text --- thin-provisioning/thin_generate_mappings.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/thin-provisioning/thin_generate_mappings.cc b/thin-provisioning/thin_generate_mappings.cc index 97402ce..1a124bb 100644 --- a/thin-provisioning/thin_generate_mappings.cc +++ b/thin-provisioning/thin_generate_mappings.cc @@ -129,10 +129,10 @@ thin_generate_mappings_cmd::usage(std::ostream &out) const << " {-h|--help}\n" << " {-o|--output} \n" << " {--dev-id} \n" - << " {--offset} \n" - << " {--io-size} \n" + << " {--offset} \n" + << " {--io-size} \n" << " {--rw write|trim|randwrite|randtrim|randtw}\n" - << " {--size} \n" + << " {--size} \n" << " {-V|--version}" << endl; }