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();
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;
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() {
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