From: Sage Weil Date: Tue, 23 Apr 2019 18:03:42 +0000 (-0500) Subject: osd: take heartbeat_lock when calling heartbeat() X-Git-Tag: v13.2.7~246^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ebd87737788bb3a28c76388c69caf5976c36783e;p=ceph.git osd: take heartbeat_lock when calling heartbeat() Fixes: http://tracker.ceph.com/issues/39439 Signed-off-by: Sage Weil (cherry picked from commit 7863d7c6c49347db97a6bca36f63fc35741ac0e5) Conflicts: src/osd/OSD.cc : Resolved in _preboot --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 49de7ba5030..9fc71e774c2 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4693,6 +4693,7 @@ void OSD::heartbeat_check() void OSD::heartbeat() { + ceph_assert(heartbeat_lock.is_locked_by_me()); dout(30) << "heartbeat" << dendl; // get CPU load avg @@ -5312,7 +5313,10 @@ void OSD::_preboot(epoch_t oldest, epoch_t newest) << oldest << ".." << newest << dendl; // ensure our local fullness awareness is accurate - heartbeat(); + { + Mutex::Locker l(heartbeat_lock); + heartbeat(); + } // if our map within recent history, try to add ourselves to the osdmap. if (osdmap->get_epoch() == 0) {