diff options
author | Samuel Just <sam.just@inktank.com> | 2013-08-05 13:51:05 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-08-06 13:51:51 -0700 |
commit | 95b3604befe1a66bc8f764e8e9636e5bdca9cef2 (patch) | |
tree | 348a990516c73aeaa172fdd92f56df346a483898 | |
parent | 321f57de97c00c44077f7007eeae20b033a38c3d (diff) | |
download | ceph-95b3604befe1a66bc8f764e8e9636e5bdca9cef2.tar.gz |
OSD: also suspend timeout while grabbing recovery_tp lock
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/osd/OSD.cc | 4 | ||||
-rw-r--r-- | src/osd/OSD.h | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index e4653dc1f70..1d51e02ad43 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -6632,7 +6632,7 @@ bool OSD::_recover_now() return true; } -void OSD::do_recovery(PG *pg) +void OSD::do_recovery(PG *pg, ThreadPool::TPHandle &handle) { // see how many we should try to start. note that this is a bit racy. recovery_wq.lock(); @@ -6652,7 +6652,7 @@ void OSD::do_recovery(PG *pg) recovery_wq.queue(pg); return; } else { - pg->lock(); + pg->lock_suspend_timeout(handle); if (pg->deleting || !(pg->is_active() && pg->is_primary())) { pg->unlock(); goto out; diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 5196a1dc1f3..ae77644eeeb 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1371,8 +1371,8 @@ protected: osd->recovery_queue.push_front(&pg->recovery_item); } } - void _process(PG *pg) { - osd->do_recovery(pg); + void _process(PG *pg, ThreadPool::TPHandle &handle) { + osd->do_recovery(pg, handle); pg->put("RecoveryWQ"); } void _clear() { @@ -1386,7 +1386,7 @@ protected: void start_recovery_op(PG *pg, const hobject_t& soid); void finish_recovery_op(PG *pg, const hobject_t& soid, bool dequeue); - void do_recovery(PG *pg); + void do_recovery(PG *pg, ThreadPool::TPHandle &handle); bool _recover_now(); // replay / delayed pg activation |