string interr, floaterr;
int64_t n = 0;
double f = 0;
+ int64_t uf = 0; // micro-f
if (!cmd_getval(g_ceph_context, cmdmap, "val", val)) {
// wasn't a string; maybe an older mon forwarded json with an int?
if (!cmd_getval(g_ceph_context, cmdmap, "val", n))
n = strict_strtoll(val.c_str(), 10, &interr);
// or a float
f = strict_strtod(val.c_str(), &floaterr);
+ uf = llrintl(f * (double)1000000.0);
}
if (var == "size") {
ss << "value must be in the range 0..1";
return -ERANGE;
}
- p.cache_target_dirty_ratio_micro = f * 1000000;
+ p.cache_target_dirty_ratio_micro = uf;
} else if (var == "cache_target_full_ratio") {
if (floaterr.length()) {
ss << "error parsing float '" << val << "': " << floaterr;
ss << "value must be in the range 0..1";
return -ERANGE;
}
- p.cache_target_full_ratio_micro = f * 1000000;
+ p.cache_target_full_ratio_micro = uf;
} else if (var == "cache_min_flush_age") {
if (interr.length()) {
ss << "error parsing int '" << val << "': " << interr;
return (double)fpp_micro / 1000000.0;
}
void set_fpp(double f) {
- fpp_micro = (unsigned)(f * 1000000.0);
+ fpp_micro = (unsigned)(llrintl(f * (double)1000000.0));
}
void encode(bufferlist& bl) const {