From 7c919e9b3afc300b8436c5bca3959cfb96ea3918 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 4 Jul 2012 19:50:34 -0700 Subject: [PATCH] workqueue: kick -> wake or _wake, depending on locking 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 --- src/common/WorkQueue.h | 26 ++++++++++++++++++++------ src/osd/OSD.cc | 11 ++++------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/common/WorkQueue.h b/src/common/WorkQueue.h index 83f789aef8489..4f2ffdeed0bc2 100644 --- a/src/common/WorkQueue.h +++ b/src/common/WorkQueue.h @@ -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(); } diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 91c0d578c3176..2a48dbb4b5d9b 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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& 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); } -- 2.39.5