]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
workqueue: kick -> wake or _wake, depending on locking
authorSage Weil <sage@inktank.com>
Thu, 5 Jul 2012 02:50:34 +0000 (19:50 -0700)
committerSage Weil <sage@inktank.com>
Fri, 6 Jul 2012 19:14:44 +0000 (12:14 -0700)
Break kick() into wake() and _wake() methods, depending on whether the
lock is already held.  (The rename ensures that we audit/fix all
callers.)

Signed-off-by: Sage Weil <sage@inktank.com>
src/common/WorkQueue.h
src/osd/OSD.cc

index 83f789aef8489262c63ccfddc2f2e3b722af9f31..4f2ffdeed0bc2b798e0e93a88afbbd7affd96d96 100644 (file)
@@ -108,8 +108,11 @@ public:
     void unlock() {
       pool->unlock();
     }
-    void kick() {
-      pool->kick();
+    void wake() {
+      pool->wake();
+    }
+    void _wake() {
+      pool->_wake();
     }
     void drain() {
       pool->drain(this);
@@ -168,8 +171,13 @@ public:
     void unlock() {
       pool->unlock();
     }
-    void kick() {
-      pool->kick();
+    /// wake up the thread pool (without lock held)
+    void wake() {
+      pool->wake();
+    }
+    /// wake up the thread pool (with lock already held)
+    void _wake() {
+      pool->_wake();
     }
     void drain() {
       pool->drain(this);
@@ -251,8 +259,14 @@ public:
   void wait(Cond &c) {
     c.Wait(_lock);
   }
-  /// wake up a waiter
-  void kick() {
+
+  /// wake up a waiter (with lock already held)
+  void _wake() {
+    _cond.Signal();
+  }
+  /// wake up a waiter (without lock held)
+  void wake() {
+    Mutex::Locker l(_lock);
     _cond.Signal();
   }
 
index 91c0d578c3176b1efc4cc0dbe0be1292ebce3608..2a48dbb4b5d9bcc281723f8245c273ded19adabf 100644 (file)
@@ -1855,7 +1855,7 @@ void OSD::tick()
   logger->set(l_osd_buf, buffer::get_total_alloc());
 
   // periodically kick recovery work queue
-  recovery_tp.kick();
+  recovery_tp.wake();
   
   if (service.scrub_should_schedule()) {
     sched_scrub();
@@ -2564,7 +2564,7 @@ void OSD::do_command(Connection *con, tid_t tid, vector<string>& cmd, bufferlist
         << "to " << g_conf->osd_recovery_delay_start;
       defer_recovery_until = ceph_clock_now(g_ceph_context);
       defer_recovery_until += g_conf->osd_recovery_delay_start;
-      recovery_wq.kick();
+      recovery_wq.wake();
     }
   }
 
@@ -4917,7 +4917,7 @@ void OSD::finish_recovery_op(PG *pg, const hobject_t& soid, bool dequeue)
     recovery_wq._queue_front(pg);
   }
 
-  recovery_wq.kick();
+  recovery_wq._wake();
   recovery_wq.unlock();
 }
 
@@ -4926,10 +4926,7 @@ void OSD::defer_recovery(PG *pg)
   dout(10) << "defer_recovery " << *pg << dendl;
 
   // move pg to the end of the queue...
-  recovery_wq.lock();
-  recovery_wq._enqueue(pg);
-  recovery_wq.kick();
-  recovery_wq.unlock();
+  recovery_wq.queue(pg);
 }