From 4a5b395c1dc003a8301784d1f5ee1b69a3d8640b Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Sat, 10 Sep 2016 15:35:26 +0800 Subject: [PATCH 1/4] os/bluestore: fix leak of result-checking of _fsck_check_extents We shall not ignore the result of _fsck_check_extents() durint fsck(). Signed-off-by: xie xingguo --- src/os/bluestore/BlueStore.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 025d60d1bfb6a..e2dc7e490141b 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -4145,7 +4145,7 @@ int BlueStore::fsck() for (auto &r : shared_blob.ref_map.ref_map) { extents.emplace_back(bluestore_pextent_t(r.first, r.second.length)); } - _fsck_check_extents(p->second.oids.front(), + errors += _fsck_check_extents(p->second.oids.front(), extents, p->second.compressed, used_blocks, expected_statfs); From d133cc571c25955db75206d5eb3aa457bdd68ed9 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Sat, 10 Sep 2016 17:58:54 +0800 Subject: [PATCH 2/4] os/bluestore: add sanity check during extent loading Otherwise there are potential extent leaks. Signed-off-by: xie xingguo --- src/os/bluestore/BlueStore.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index e2dc7e490141b..b92637d71c92c 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1702,6 +1702,8 @@ void BlueStore::ExtentMap::decode_some(bufferlist& bl) ++n; extent_map.insert(*le); } + + assert(n == num); } void BlueStore::ExtentMap::encode_spanning_blobs(bufferlist& bl) From 4fc48a6bd71e39213f1bcdeb89b79cebb8dcb22b Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Sat, 10 Sep 2016 18:08:52 +0800 Subject: [PATCH 3/4] os/bluestore: kill fill() method from bluestore_extent_ref_map_t Signed-off-by: xie xingguo --- src/os/bluestore/bluestore_types.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index f0203c930b98b..8220f8c74cfa7 100644 --- a/src/os/bluestore/bluestore_types.h +++ b/src/os/bluestore/bluestore_types.h @@ -175,15 +175,6 @@ struct bluestore_extent_ref_map_t { return ref_map.empty(); } - // raw reference insertion that assumes no conflicts/interference - // with the existing references - void fill(uint32_t offset, uint32_t len, int refs = 1) { - auto p = ref_map.insert( - map::value_type(offset, - record_t(len, refs))).first; - _maybe_merge_left(p); - } - void get(uint32_t offset, uint32_t len); void put(uint32_t offset, uint32_t len, vector *release); From 97848a8b7a3d4a70b56e9b6a873ffe42c4b6fdfc Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Sat, 10 Sep 2016 18:33:42 +0800 Subject: [PATCH 4/4] os/bluestore: drop bluestore_blob_id_t which is not used anymore. Signed-off-by: xie xingguo --- src/os/bluestore/bluestore_types.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index 8220f8c74cfa7..15a5925cabdbc 100644 --- a/src/os/bluestore/bluestore_types.h +++ b/src/os/bluestore/bluestore_types.h @@ -590,12 +590,6 @@ WRITE_CLASS_ENCODER(bluestore_shared_blob_t) ostream& operator<<(ostream& out, const bluestore_shared_blob_t& o); - - -/// blob id: positive = local, negative = shared bnode -typedef int64_t bluestore_blob_id_t; - - /// onode: per-object metadata struct bluestore_onode_t { uint64_t nid = 0; ///< numeric id (locally unique)