]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: pass containers by ptr in FSCK_ObjectCtx
authorIgor Fedotov <ifedotov@suse.com>
Fri, 6 Sep 2019 12:49:13 +0000 (15:49 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Wed, 11 Sep 2019 15:15:28 +0000 (18:15 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index d6cfb68dcc76aba1de394ba41d2390a74c6dd071..5d5d12cb87e303f7964ad6fe37b9d292fd62a7d4 100644 (file)
@@ -7102,7 +7102,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;
 
@@ -7240,9 +7240,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,
@@ -7264,9 +7265,9 @@ void BlueStore::_fsck_check_objects(FSCKDepth depth,
 {
   auto& errors = ctx.errors;
   auto& warnings = ctx.warnings;
-  auto& used_omap_head = ctx.used_omap_head;
-  auto& used_per_pool_omap_head = ctx.used_per_pool_omap_head;
-  auto& used_pgmeta_omap_head = ctx.used_pgmeta_omap_head;
+  auto* used_omap_head = ctx.used_omap_head;
+  auto* used_per_pool_omap_head = ctx.used_per_pool_omap_head;
+  auto* used_pgmeta_omap_head = ctx.used_pgmeta_omap_head;
   auto repairer = ctx.repairer;
 
   uint64_t_btree_t used_nids;
@@ -7453,16 +7454,19 @@ void BlueStore::_fsck_check_objects(FSCKDepth depth,
         }
         // omap
         if (o->onode.has_omap()) {
-          auto& m =
+          ceph_assert(used_omap_head);
+          ceph_assert(used_per_pool_omap_head);
+          ceph_assert(used_pgmeta_omap_head);
+          auto m =
             o->onode.is_pgmeta_omap() ? used_pgmeta_omap_head :
             (o->onode.is_perpool_omap() ? used_per_pool_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 (!o->onode.is_perpool_omap() && !o->onode.is_pgmeta_omap()) {
             if (per_pool_omap) {
@@ -7489,8 +7493,8 @@ void BlueStore::_fsck_check_objects(FSCKDepth depth,
             !o->onode.is_perpool_omap() &&
             !o->oid.is_pgmeta()) {
             derr << "fsck converting " << oid << " omap to per-pool" << dendl;
-            used_omap_head.erase(o->onode.nid);
-            used_per_pool_omap_head.insert(o->onode.nid);
+            used_omap_head->erase(o->onode.nid);
+            used_per_pool_omap_head->insert(o->onode.nid);
             bufferlist h;
             map<string, bufferlist> kv;
             int r = _omap_get(c.get(), oid, &h, &kv);
@@ -7782,10 +7786,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,
+      &used_per_pool_omap_head,
+      &used_pgmeta_omap_head,
       sb_info,
       expected_store_statfs,
       expected_pool_statfs,
index aeafb16566235c2b1ea888b10fe8cbf3d020c1f0..7c41da8faf090b05769654de5d17d6a5d2b02401 100644 (file)
@@ -3087,32 +3087,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),