From: Sage Weil Date: Wed, 13 Aug 2014 20:15:04 +0000 (-0700) Subject: mon: fix potential divide by zero on can_mark_{down,out} X-Git-Tag: v0.85~50 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8a647f7d40710e677f0600e2a245f9262d74f2f7;p=ceph.git mon: fix potential divide by zero on can_mark_{down,out} Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index bed0185fe9c4..e5e46e937a1b 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -929,8 +929,13 @@ bool OSDMonitor::can_mark_down(int i) dout(5) << "can_mark_down NODOWN flag set, will not mark osd." << i << " down" << dendl; return false; } + int num_osds = osdmap.get_num_osds(); + if (num_osds == 0) { + dout(5) << "can_mark_down no osds" << dendl; + return false; + } int up = osdmap.get_num_up_osds() - pending_inc.get_net_marked_down(&osdmap); - float up_ratio = (float)up / (float)osdmap.get_num_osds(); + float up_ratio = (float)up / (float)num_osds; if (up_ratio < g_conf->mon_osd_min_up_ratio) { dout(5) << "can_mark_down current up_ratio " << up_ratio << " < min " << g_conf->mon_osd_min_up_ratio @@ -959,8 +964,13 @@ bool OSDMonitor::can_mark_out(int i) dout(5) << "can_mark_out NOOUT flag set, will not mark osds out" << dendl; return false; } + int num_osds = osdmap.get_num_osds(); + if (num_osds == 0) { + dout(5) << "can_mark_out no osds" << dendl; + return false; + } int in = osdmap.get_num_in_osds() - pending_inc.get_net_marked_out(&osdmap); - float in_ratio = (float)in / (float)osdmap.get_num_osds(); + float in_ratio = (float)in / (float)num_osds; if (in_ratio < g_conf->mon_osd_min_in_ratio) { if (i >= 0) dout(5) << "can_mark_down current in_ratio " << in_ratio << " < min "