DEBUG_REQ(D_NET, req, "REPLIED:");
GOTO(out, rc = 1);
}
+
+ if (req->rq_net_err && !req->rq_timedout) {
+ spin_unlock_irqrestore (&req->rq_lock, flags);
+ rc = ptlrpc_expire_one_request(req);
+ spin_lock_irqsave (&req->rq_lock, flags);
+ GOTO(out, rc);
+ }
if (req->rq_err) {
DEBUG_REQ(D_ERROR, req, "ABORTED:");
rc = ptl_send_rpc(req);
if (rc) {
DEBUG_REQ(D_HA, req, "send failed (%d); expect timeout", rc);
- req->rq_timeout = 1;
+ req->rq_net_err = 1;
RETURN(rc);
}
RETURN(0);
if (req->rq_phase == RQ_PHASE_INTERPRET)
GOTO(interpret, req->rq_status);
+ if (req->rq_net_err && !req->rq_timedout)
+ ptlrpc_expire_one_request(req);
+
if (req->rq_err) {
ptlrpc_unregister_reply(req);
if (req->rq_status == 0)
if (req->rq_waiting || req->rq_resend) {
int status;
- LASSERT (!ptlrpc_client_receiving_reply(req));
- LASSERT (req->rq_bulk == NULL ||
- !ptlrpc_bulk_active(req->rq_bulk));
-
spin_lock_irqsave(&imp->imp_lock, flags);
- if (ptlrpc_import_delay_req(imp, req, &status)) {
+ if (ptlrpc_import_delay_req(imp, req, &status)){
spin_unlock_irqrestore(&imp->imp_lock,
flags);
continue;
if (req->rq_bulk) {
__u64 old_xid = req->rq_xid;
+ ptlrpc_unregister_bulk (req);
+
/* ensure previous bulk fails */
req->rq_xid = ptlrpc_next_xid();
CDEBUG(D_HA, "resend bulk "
DEBUG_REQ(D_HA, req, "send failed (%d)",
rc);
force_timer_recalc = 1;
- req->rq_timeout = 0;
+ req->rq_net_err = 1;
}
/* need to reset the timeout */
force_timer_recalc = 1;
spin_lock_irqsave (&req->rq_lock, flags);
req->rq_resend = 1;
+ req->rq_net_err = 0;
req->rq_timedout = 0;
if (req->rq_bulk) {
__u64 old_xid = req->rq_xid;