From 0b1128e88e8276bf6b429f1b03a0addbe472bfc0 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 20 Nov 2008 14:46:15 -0800 Subject: [PATCH] osd: use map_lock to avoid osdmap update race in _finish_recovery --- src/osd/PG.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 385979c1ef2eb..ece2af58fe642 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1334,15 +1334,17 @@ void PG::finish_recovery() void PG::_finish_recovery(Context *c) { - osd->osd_lock.Lock(); // avoid race with advance_map, etc.. + osd->map_lock.get_read(); // avoid race with advance_map, etc.. lock(); if (c == finish_sync_event) { - finish_sync_event = 0; dout(10) << "_finish_recovery" << dendl; + finish_sync_event = 0; purge_strays(); update_stats(); + } else { + dout(10) << "_finish_recovery -- stale" << dendl; } - osd->osd_lock.Unlock(); + osd->map_lock.put_read(); osd->finish_recovery_op(this, recovery_ops_active, true); put_unlock(); } -- 2.39.5