]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: only do agent mode calculations for positive values
authorSage Weil <sage@redhat.com>
Wed, 13 Aug 2014 17:34:53 +0000 (10:34 -0700)
committerSage Weil <sage@redhat.com>
Wed, 13 Aug 2014 17:34:53 +0000 (10:34 -0700)
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 <karan.singh@csc.fi>
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/ReplicatedPG.cc

index 7feb2d843d30a7791548e4504e68d25628f90192..9ecb391ec29624a53d5b641ec4b57fdedd9a0266 100644 (file)
@@ -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);