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.80.6~78 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4a5c93a90986de4510c50f0fba72ae7d5aed8a15;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 (cherry picked from commit 5be56ff86d9f3ab2407a258a5285d0b8f52f041e) --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 0e9fc6209111..155c322a55df 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -11470,7 +11470,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 = @@ -11480,7 +11480,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);