get_rule_avail() may return < 0, which we were using blindly assuming it
would always return an unsigned value. We would end up with weird
values if the ruleset had no osds.
Signed-off-by: Joao Eduardo Luis <joao@redhat.com>
(cherry picked from commit
8be6a6ab2aa5a000a39c73a98b11a0ab32fffa1c)
int ruleno = osdmap.crush->find_rule(pool->get_crush_ruleset(),
pool->get_type(),
pool->get_size());
- uint64_t avail;
+ int64_t avail;
if (avail_by_rule.count(ruleno) == 0) {
avail = get_rule_avail(osdmap, ruleno);
+ if (avail < 0)
+ avail = 0;
avail_by_rule[ruleno] = avail;
} else {
avail = avail_by_rule[ruleno];