|
@@ -126,7 +126,7 @@ static void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
|
|
|
|
|
|
switch (chan->last_type) {
|
|
|
case RXRPC_PACKET_TYPE_ABORT:
|
|
|
- _proto("Tx ABORT %%%u { %d } [re]", serial, conn->local_abort);
|
|
|
+ _proto("Tx ABORT %%%u { %d } [re]", serial, conn->abort_code);
|
|
|
break;
|
|
|
case RXRPC_PACKET_TYPE_ACK:
|
|
|
trace_rxrpc_tx_ack(chan->call_debug_id, serial,
|
|
@@ -153,13 +153,12 @@ static void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
|
|
|
* pass a connection-level abort onto all calls on that connection
|
|
|
*/
|
|
|
static void rxrpc_abort_calls(struct rxrpc_connection *conn,
|
|
|
- enum rxrpc_call_completion compl,
|
|
|
- u32 abort_code, int error)
|
|
|
+ enum rxrpc_call_completion compl)
|
|
|
{
|
|
|
struct rxrpc_call *call;
|
|
|
int i;
|
|
|
|
|
|
- _enter("{%d},%x", conn->debug_id, abort_code);
|
|
|
+ _enter("{%d},%x", conn->debug_id, conn->abort_code);
|
|
|
|
|
|
spin_lock(&conn->channel_lock);
|
|
|
|
|
@@ -172,9 +171,11 @@ static void rxrpc_abort_calls(struct rxrpc_connection *conn,
|
|
|
trace_rxrpc_abort(call->debug_id,
|
|
|
"CON", call->cid,
|
|
|
call->call_id, 0,
|
|
|
- abort_code, error);
|
|
|
+ conn->abort_code,
|
|
|
+ conn->error);
|
|
|
if (rxrpc_set_call_completion(call, compl,
|
|
|
- abort_code, error))
|
|
|
+ conn->abort_code,
|
|
|
+ conn->error))
|
|
|
rxrpc_notify_socket(call);
|
|
|
}
|
|
|
}
|
|
@@ -207,10 +208,12 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ conn->error = error;
|
|
|
+ conn->abort_code = abort_code;
|
|
|
conn->state = RXRPC_CONN_LOCALLY_ABORTED;
|
|
|
spin_unlock_bh(&conn->state_lock);
|
|
|
|
|
|
- rxrpc_abort_calls(conn, RXRPC_CALL_LOCALLY_ABORTED, abort_code, error);
|
|
|
+ rxrpc_abort_calls(conn, RXRPC_CALL_LOCALLY_ABORTED);
|
|
|
|
|
|
msg.msg_name = &conn->params.peer->srx.transport;
|
|
|
msg.msg_namelen = conn->params.peer->srx.transport_len;
|
|
@@ -229,7 +232,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
|
|
|
whdr._rsvd = 0;
|
|
|
whdr.serviceId = htons(conn->service_id);
|
|
|
|
|
|
- word = htonl(conn->local_abort);
|
|
|
+ word = htonl(conn->abort_code);
|
|
|
|
|
|
iov[0].iov_base = &whdr;
|
|
|
iov[0].iov_len = sizeof(whdr);
|
|
@@ -240,7 +243,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
|
|
|
|
|
|
serial = atomic_inc_return(&conn->serial);
|
|
|
whdr.serial = htonl(serial);
|
|
|
- _proto("Tx CONN ABORT %%%u { %d }", serial, conn->local_abort);
|
|
|
+ _proto("Tx CONN ABORT %%%u { %d }", serial, conn->abort_code);
|
|
|
|
|
|
ret = kernel_sendmsg(conn->params.local->socket, &msg, iov, 2, len);
|
|
|
if (ret < 0) {
|
|
@@ -315,9 +318,10 @@ static int rxrpc_process_event(struct rxrpc_connection *conn,
|
|
|
abort_code = ntohl(wtmp);
|
|
|
_proto("Rx ABORT %%%u { ac=%d }", sp->hdr.serial, abort_code);
|
|
|
|
|
|
+ conn->error = -ECONNABORTED;
|
|
|
+ conn->abort_code = abort_code;
|
|
|
conn->state = RXRPC_CONN_REMOTELY_ABORTED;
|
|
|
- rxrpc_abort_calls(conn, RXRPC_CALL_REMOTELY_ABORTED,
|
|
|
- abort_code, -ECONNABORTED);
|
|
|
+ rxrpc_abort_calls(conn, RXRPC_CALL_REMOTELY_ABORTED);
|
|
|
return -ECONNABORTED;
|
|
|
|
|
|
case RXRPC_PACKET_TYPE_CHALLENGE:
|