]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: initialize new_state field when we use it
authorSage Weil <sage@inktank.com>
Wed, 29 May 2013 23:50:04 +0000 (16:50 -0700)
committerSage Weil <sage@inktank.com>
Wed, 29 May 2013 23:53:28 +0000 (16:53 -0700)
If we use operator[] on a new int field its value is undefined; avoid
reading it or using |= et al until we initialize it.

Fixes: #4967
Backport: cuttlefish, bobtail
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: David Zafman <david.zafman@inktank.com>
(cherry picked from commit 50ac8917f175d1b107c18ecb025af1a7b103d634)

src/mon/OSDMonitor.cc

index 3e6b01831fd32477335f190f682e7ae9fc10637a..014768f9a5d350adfd8bcef75e6ceb61d2d73a55 100644 (file)
@@ -762,7 +762,8 @@ bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi)
           << dendl;
 
   // already pending failure?
-  if (pending_inc.new_state[target_osd] & CEPH_OSD_UP) {
+  if (pending_inc.new_state.count(target_osd) &&
+      pending_inc.new_state[target_osd] & CEPH_OSD_UP) {
     dout(10) << " already pending failure" << dendl;
     return true;
   }
@@ -2593,6 +2594,8 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
 
   done:
       dout(10) << " creating osd." << i << dendl;
+      if (pending_inc.new_state.count(i) == 0)
+       pending_inc.new_state[i] = 0;
       pending_inc.new_state[i] |= CEPH_OSD_EXISTS | CEPH_OSD_NEW;
       if (!uuid.is_zero())
        pending_inc.new_uuid[i] = uuid;