From: Sage Weil Date: Wed, 13 Aug 2014 17:34:53 +0000 (-0700) Subject: osd/ReplicatedPG: only do agent mode calculations for positive values X-Git-Tag: v0.84~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5be56ff86d9f3ab2407a258a5285d0b8f52f041e;p=ceph.git osd/ReplicatedPG: only do agent mode calculations for positive values After a split we can get negative values here. Only do the arithmetic if we have a valid (positive) value that won't through the floating point unit for a loop. Fixes: #9082 Tested-by: Karan Singh Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 7feb2d843d3..9ecb391ec29 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -11500,7 +11500,7 @@ void ReplicatedPG::agent_choose_mode(bool restart) // get dirty, full ratios uint64_t dirty_micro = 0; uint64_t full_micro = 0; - if (pool.info.target_max_bytes && info.stats.stats.sum.num_objects) { + if (pool.info.target_max_bytes && info.stats.stats.sum.num_objects > 0) { uint64_t avg_size = info.stats.stats.sum.num_bytes / info.stats.stats.sum.num_objects; dirty_micro = @@ -11510,7 +11510,7 @@ void ReplicatedPG::agent_choose_mode(bool restart) num_user_objects * avg_size * 1000000 / MAX(pool.info.target_max_bytes / divisor, 1); } - if (pool.info.target_max_objects) { + if (pool.info.target_max_objects > 0) { uint64_t dirty_objects_micro = num_dirty * 1000000 / MAX(pool.info.target_max_objects / divisor, 1);