Fixes: http://tracker.ceph.com/issues/39390
Signed-off-by: Jeegn Chen <jeegnchen@tencent.com>
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