]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
filestore: assure sufficient leaves in pre-split 30182/head
authorJeegn Chen <jeegnchen@tencent.com>
Thu, 18 Apr 2019 04:04:02 +0000 (12:04 +0800)
committerNathan Cutler <ncutler@suse.com>
Thu, 5 Sep 2019 12:49:42 +0000 (14:49 +0200)
Fixes: http://tracker.ceph.com/issues/39390
Signed-off-by: Jeegn Chen <jeegnchen@tencent.com>
(cherry picked from commit 4e530a14b43b4a4767152e72bc5398bf4d532967)

src/os/filestore/HashIndex.cc

index 50bdf3cd2bc27a7326b762f2d0637bb197f9a45a..7ec2c4e0910097329b390714f6625893023598a3 100644 (file)
@@ -587,10 +587,11 @@ int HashIndex::pre_split_folder(uint32_t pg_num, uint64_t expected_num_objs)
   const uint32_t subs = (1 << split_bits);
   // Calculate how many levels we create starting from here
   int level  = 0;
-  leavies /= subs;
-  while (leavies > 1) {
+  int level_limit = MAX_HASH_LEVEL - dump_num - 1;
+  uint64_t actual_leaves = subs;
+  while (actual_leaves < leavies && level < level_limit) {
     ++level;
-    leavies = leavies >> 4;
+    actual_leaves <<= 4;
   }
   for (uint32_t i = 0; i < subs; ++i) {
     ceph_assert(split_bits <= 4); // otherwise BAD_SHIFT