- if (req->rq_reqmsg->transno != obd->obd_next_recovery_transno) {
- spin_unlock_bh(&obd->obd_processing_task_lock);
- CDEBUG(D_HA, "Waiting for transno "LPD64" (1st is "
- LPD64")\n",
- obd->obd_next_recovery_transno,
- req->rq_reqmsg->transno);
- l_wait_event(obd->obd_next_transno_waitq,
- check_for_next_transno(obd), &lwi);
+
+static int target_recovery_thread(void *arg)
+{
+ struct obd_device *obd = arg;
+ struct ptlrpc_request *req;
+ struct target_recovery_data *trd = &obd->obd_recovery_data;
+ unsigned long flags;
+ ENTRY;
+
+ kportal_daemonize("tgt-recov");
+
+ SIGNAL_MASK_LOCK(current, flags);
+ sigfillset(¤t->blocked);
+ RECALC_SIGPENDING;
+ SIGNAL_MASK_UNLOCK(current, flags);
+
+ CERROR("%s: started recovery thread pid %d\n", obd->obd_name,
+ current->pid);
+ trd->trd_processing_task = current->pid;
+
+ obd->obd_recovering = 1;
+ complete(&trd->trd_starting);
+
+ while (obd->obd_recovering) {
+ LASSERT(trd->trd_processing_task == current->pid);
+ req = target_next_replay_req(obd);
+ if (req != NULL) {
+ char peer_str[PTL_NALFMT_SIZE];
+ DEBUG_REQ(D_HA, req, "processing t"LPD64" from %s: ",
+ req->rq_reqmsg->transno,
+ ptlrpc_peernid2str(&req->rq_peer, peer_str));
+ (void)trd->trd_recovery_handler(req);
+ obd->obd_replayed_requests++;
+ reset_recovery_timer(obd);
+ /* bug 1580: decide how to properly sync() in recovery*/
+ //mds_fsync_super(mds->mds_sb);
+ ptlrpc_free_clone(req);