From 5be56ff86d9f3ab2407a258a5285d0b8f52f041e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 13 Aug 2014 10:34:53 -0700 Subject: [PATCH] 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 --- src/osd/ReplicatedPG.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 7feb2d843d30a..9ecb391ec2962 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); -- 2.39.5