int obd_delayed_clients;
spinlock_t obd_processing_task_lock; /* BH lock (timer) */
pid_t obd_processing_task;
+ /* thread to handle recovery queue */
+ struct ptlrpc_thread *obd_recovery_thread;
__u64 obd_next_recovery_transno;
int obd_replayed_requests;
int obd_requests_queued_for_recovery;
ldlm_reprocess_all_ns(obd->obd_namespace);
spin_lock_bh(&obd->obd_processing_task_lock);
if (list_empty(&obd->obd_recovery_queue)) {
+ obd->obd_recovery_thread = NULL;
obd->obd_processing_task = 0;
} else {
spin_unlock_bh(&obd->obd_processing_task_lock);
continue;
}
list_del_init(&req->rq_list);
+ LASSERT(obd->obd_recovery_thread);
+ /* replace request initial thread with current one, bug #18221 */
+ req->rq_svc_thread = obd->obd_recovery_thread;
obd->obd_requests_queued_for_recovery--;
spin_unlock_bh(&obd->obd_processing_task_lock);
spin_lock_bh(&obd->obd_processing_task_lock);
if (list_empty(&obd->obd_recovery_queue)) {
obd->obd_processing_task = 0;
+ obd->obd_recovery_thread = NULL;
spin_unlock_bh(&obd->obd_processing_task_lock);
break;
}
* now, so we'll do the honours.
*/
obd->obd_processing_task = cfs_curproc_pid();
+ /* save thread that handle recovery queue */
+ obd->obd_recovery_thread = req->rq_svc_thread;
spin_unlock_bh(&obd->obd_processing_task_lock);
process_recovery_queue(obd);