]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: use map_lock to avoid osdmap update race in _finish_recovery
authorSage Weil <sage@newdream.net>
Thu, 20 Nov 2008 22:46:15 +0000 (14:46 -0800)
committerSage Weil <sage@newdream.net>
Thu, 20 Nov 2008 22:48:31 +0000 (14:48 -0800)
src/osd/PG.cc

index 385979c1ef2eb1d83081ea099996e9d2e0db5af4..ece2af58fe6427eb97fd121dc53b79f458fb2dc8 100644 (file)
@@ -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();
 }