]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: take heartbeat_lock when calling heartbeat() 28164/head
authorSage Weil <sage@redhat.com>
Tue, 23 Apr 2019 18:03:42 +0000 (13:03 -0500)
committerPrashant D <pdhange@redhat.com>
Sun, 19 May 2019 22:54:10 +0000 (18:54 -0400)
Fixes: http://tracker.ceph.com/issues/39439
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 7863d7c6c49347db97a6bca36f63fc35741ac0e5)

src/osd/OSD.cc

index a2e04da8b871266dceabdc2a49c2e6b12ed120ff..17f8e57f2ffd3b79fa26adc55f9bcbcbf10e6ffb 100644 (file)
@@ -5217,6 +5217,7 @@ void OSD::heartbeat_check()
 
 void OSD::heartbeat()
 {
+  ceph_assert(heartbeat_lock.is_locked_by_me());
   dout(30) << "heartbeat" << dendl;
 
   // get CPU load avg
@@ -5866,7 +5867,10 @@ void OSD::_preboot(epoch_t oldest, epoch_t newest)
           << oldest << ".." << newest << dendl;
 
   // ensure our local fullness awareness is accurate
-  heartbeat();
+  {
+    std::lock_guard l(heartbeat_lock);
+    heartbeat();
+  }
 
   // if our map within recent history, try to add ourselves to the osdmap.
   if (osdmap->get_epoch() == 0) {