]> git.apps.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>
Mon, 18 Nov 2019 09:14:24 +0000 (12:14 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
(cherry picked from commit 799d54125584c2f7cb42d110b53b1e33e7b9bacb)

 Conflicts:
src/os/bluestore/BlueStore.cc
        - lacking per-pool omap

src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index b5abce6ff78a375498f99d28d3bdf9da4d5517c0..d8e5313eaa27f9a0d3ba095a6a34dcea78bdf203 100644 (file)
@@ -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,
index 1447bab84c715a1aae36d4823bb8596a5331d7b9..01e36aefc26f0f4f4330780a2f812f1fd272356c 100644 (file)
@@ -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),