From 3fb41776561c1ecaaa56eae6b93aee6089de26b6 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 8 Apr 2016 17:07:04 +0100 Subject: [PATCH] [thin_trim] more bug fixing --- thin-provisioning/thin_trim.cc | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/thin-provisioning/thin_trim.cc b/thin-provisioning/thin_trim.cc index 0a8a3b0..2cee686 100644 --- a/thin-provisioning/thin_trim.cc +++ b/thin-provisioning/thin_trim.cc @@ -39,8 +39,6 @@ namespace { range[0] = block_to_byte(b); range[1] = block_to_byte(e) - range[0]; - cerr << "emitting discard for blocks (" << b << ", " << e << "]\n"; - if (ioctl(fd_, BLKDISCARD, &range)) throw runtime_error("discard ioctl failed"); } @@ -99,8 +97,13 @@ namespace { highest_ = b; if (count) { - if (last_referenced_ && (b > *last_referenced_ + 1)) - emitter_.emit(*last_referenced_ + 1, b); + if (last_referenced_) { + if (b > *last_referenced_ + 1) + emitter_.emit(*last_referenced_ + 1, b); + + } else if (b > 0) { + emitter_.emit(0, b); + } last_referenced_ = b; } @@ -109,7 +112,7 @@ namespace { void complete() { if (last_referenced_) { if (*last_referenced_ != *highest_) - emitter_.emit(*last_referenced_, *highest_ + 1ull); + emitter_.emit(*last_referenced_ + 1ull, *highest_ + 1ull); } else if (highest_) emitter_.emit(0ull, *highest_ + 1); @@ -122,17 +125,13 @@ namespace { }; int trim(string const &metadata_dev, string const &data_dev) { - cerr << "in trim\n"; - // We can trim any block that has zero count in the data // space map. block_manager<>::ptr bm = open_bm(metadata_dev, block_manager<>::READ_ONLY); metadata md(bm); - if (!md.data_sm_->get_nr_free()) { - cerr << "All data blocks allocated, nothing to discard\n"; + if (!md.data_sm_->get_nr_free()) return 0; - } discard_emitter de(data_dev, md.sb_.data_block_size_, md.data_sm_->get_nr_blocks());