]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: sched_scrub() outside of map_lock
authorSage Weil <sage@newdream.net>
Mon, 20 Feb 2012 22:41:28 +0000 (14:41 -0800)
committerSage Weil <sage@newdream.net>
Mon, 20 Feb 2012 22:41:28 +0000 (14:41 -0800)
Inside sched_scrub() we call _lookup_lock_pg(), which takes
map_lock.get_read().  That's technically okay because RWLock read side is
recursive, but lockdep doesn't know that, and we don't need map_lock
because we hold osd_lock.

Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/OSD.cc

index 402e11724a3038efe2225635da57985c381be18c..b11f906a272862b9b57d267ec0155337e225d975 100644 (file)
@@ -1762,12 +1762,12 @@ void OSD::tick()
   // periodically kick recovery work queue
   recovery_tp.kick();
   
-  map_lock.get_read();
-
   if (scrub_should_schedule()) {
     sched_scrub();
   }
 
+  map_lock.get_read();
+
   heartbeat_lock.Lock();
   heartbeat_check();
   heartbeat_lock.Unlock();