From f8711f30a0228f3a5050e135bd13a161ba38d1af Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Fri, 6 Sep 2019 15:49:13 +0300 Subject: [PATCH] os/bluestore: pass containers by ptr in FSCK_ObjectCtx Signed-off-by: Igor Fedotov (cherry picked from commit 799d54125584c2f7cb42d110b53b1e33e7b9bacb) Conflicts: src/os/bluestore/BlueStore.cc - lacking per-pool omap --- src/os/bluestore/BlueStore.cc | 28 ++++++++++++------------- src/os/bluestore/BlueStore.h | 39 +++++++++++++++++------------------ 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index b5abce6ff78a..d8e5313eaa27 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -6857,7 +6857,7 @@ BlueStore::OnodeRef BlueStore::_fsck_check_objects_shallow( auto& num_blobs = ctx.num_blobs; auto& num_sharded_objects = ctx.num_sharded_objects; auto& num_spanning_blobs = ctx.num_spanning_blobs; - auto& used_blocks = ctx.used_blocks; + auto used_blocks = ctx.used_blocks; auto& sb_info = ctx.sb_info; auto repairer = ctx.repairer; @@ -6995,9 +6995,10 @@ BlueStore::OnodeRef BlueStore::_fsck_check_objects_shallow( } } } else if (depth != FSCK_SHALLOW) { + ceph_assert(used_blocks); errors += _fsck_check_extents(c->cid, oid, blob.get_extents(), blob.is_compressed(), - used_blocks, + *used_blocks, fm->get_alloc_size(), repairer, onode_statfs, @@ -7018,10 +7019,8 @@ void BlueStore::_fsck_check_objects(FSCKDepth depth, const BlueStore::FSCK_ObjectCtx& ctx) { auto& errors = ctx.errors; - auto& warnings = ctx.warnings; - auto& used_omap_head = ctx.used_omap_head; - auto& used_pgmeta_omap_head = ctx.used_pgmeta_omap_head; - auto repairer = ctx.repairer; + auto* used_omap_head = ctx.used_omap_head; + auto* used_pgmeta_omap_head = ctx.used_pgmeta_omap_head; uint64_t_btree_t used_nids; @@ -7207,14 +7206,16 @@ void BlueStore::_fsck_check_objects(FSCKDepth depth, } // omap if (o->onode.has_omap()) { - auto& m = + ceph_assert(used_omap_head); + ceph_assert(used_pgmeta_omap_head); + auto m = o->onode.is_pgmeta_omap() ? used_pgmeta_omap_head : used_omap_head; - if (m.count(o->onode.nid)) { + if (m->count(o->onode.nid)) { derr << "fsck error: " << oid << " omap_head " << o->onode.nid << " already in use" << dendl; ++errors; } else { - m.insert(o->onode.nid); + m->insert(o->onode.nid); } } if (depth == FSCK_DEEP) { @@ -7290,7 +7291,6 @@ int BlueStore::_fsck(BlueStore::FSCKDepth depth, bool repair) unsigned repaired = 0; uint64_t_btree_t used_omap_head; - uint64_t_btree_t used_per_pool_omap_head; // just a placeholder to be inline with masterD uint64_t_btree_t used_pgmeta_omap_head; uint64_t_btree_t used_sbids; @@ -7448,10 +7448,10 @@ int BlueStore::_fsck(BlueStore::FSCKDepth depth, bool repair) num_blobs, num_sharded_objects, num_spanning_blobs, - used_blocks, - used_omap_head, - used_per_pool_omap_head, - used_pgmeta_omap_head, + &used_blocks, + &used_omap_head, + nullptr, + &used_pgmeta_omap_head, sb_info, expected_store_statfs, expected_pool_statfs, diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 1447bab84c71..01e36aefc26f 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -3088,32 +3088,31 @@ private: uint64_t& num_sharded_objects; uint64_t& num_spanning_blobs; - mempool_dynamic_bitset& used_blocks; - uint64_t_btree_t& used_omap_head; - uint64_t_btree_t& used_per_pool_omap_head; - uint64_t_btree_t& used_pgmeta_omap_head; + mempool_dynamic_bitset* used_blocks; + uint64_t_btree_t* used_omap_head; + uint64_t_btree_t* used_per_pool_omap_head; + uint64_t_btree_t* used_pgmeta_omap_head; sb_info_map_t& sb_info; store_statfs_t& expected_store_statfs; per_pool_statfs& expected_pool_statfs; BlueStoreRepairer* repairer; - FSCK_ObjectCtx( - int64_t& e, - int64_t& w, - uint64_t& _num_objects, - uint64_t& _num_extents, - uint64_t& _num_blobs, - uint64_t& _num_sharded_objects, - uint64_t& _num_spanning_blobs, - mempool_dynamic_bitset& _ub, - uint64_t_btree_t& _used_omap_head, - uint64_t_btree_t& _used_per_pool_omap_head, - uint64_t_btree_t& _used_pgmeta_omap_head, - sb_info_map_t& _sb_info, - store_statfs_t& _store_statfs, - per_pool_statfs& _pool_statfs, - BlueStoreRepairer* _repairer) : + FSCK_ObjectCtx(int64_t& e, + int64_t& w, + uint64_t& _num_objects, + uint64_t& _num_extents, + uint64_t& _num_blobs, + uint64_t& _num_sharded_objects, + uint64_t& _num_spanning_blobs, + mempool_dynamic_bitset* _ub, + uint64_t_btree_t* _used_omap_head, + uint64_t_btree_t* _used_per_pool_omap_head, + uint64_t_btree_t* _used_pgmeta_omap_head, + sb_info_map_t& _sb_info, + store_statfs_t& _store_statfs, + per_pool_statfs& _pool_statfs, + BlueStoreRepairer* _repairer) : errors(e), warnings(w), num_objects(_num_objects), -- 2.47.3