*/
list_for_each_safe(tmp, pos, &imp->imp_replay_list) {
req = list_entry(tmp, struct ptlrpc_request, rq_replay_list);
-
+
/* If need to resend the last sent transno (because a
reconnect has occurred), then stop on the matching
req and send it again. If, however, the last sent
req = NULL;
}
+ spin_lock(&imp->imp_lock);
imp->imp_resend_replay = 0;
+ spin_unlock(&imp->imp_lock);
if (req != NULL) {
rc = ptlrpc_replay_req(req);
spin_unlock(&imp->imp_lock);
RETURN(-1);
}
- spin_unlock(&imp->imp_lock);
list_for_each_entry_safe(req, next, &imp->imp_sending_list, rq_list) {
LASSERTF((long)req > CFS_PAGE_SIZE && req != LP_POISON,
"req %p bad\n", req);
LASSERTF(req->rq_type != LI_POISON, "req %p freed\n", req);
- ptlrpc_resend_req(req);
+ if (!req->rq_no_resend)
+ ptlrpc_resend_req(req);
}
+ spin_unlock(&imp->imp_lock);
RETURN(0);
}
LCONSOLE_WARN("setting import %s INACTIVE by administrator "
"request\n", obd2cli_tgt(imp->imp_obd));
ptlrpc_invalidate_import(imp);
+
+ spin_lock(&imp->imp_lock);
imp->imp_deactive = 1;
+ spin_unlock(&imp->imp_lock);
}
/* When activating, mark import valid, and attempt recovery */
if (active) {
+ spin_lock(&imp->imp_lock);
imp->imp_deactive = 0;
+ spin_unlock(&imp->imp_lock);
+
CDEBUG(D_HA, "setting import %s VALID\n",
obd2cli_tgt(imp->imp_obd));
rc = ptlrpc_recover_import(imp, NULL);
/* force import to be disconnected. */
ptlrpc_set_import_discon(imp, 0);
+ spin_lock(&imp->imp_lock);
imp->imp_deactive = 0;
+ spin_unlock(&imp->imp_lock);
+
rc = ptlrpc_recover_import_no_retry(imp, new_uuid);
RETURN(rc);