|
@@ -278,23 +278,26 @@ static bool rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
|
|
|
static bool rxrpc_end_tx_phase(struct rxrpc_call *call, bool reply_begun,
|
|
|
const char *abort_why)
|
|
|
{
|
|
|
+ unsigned int state;
|
|
|
|
|
|
ASSERT(test_bit(RXRPC_CALL_TX_LAST, &call->flags));
|
|
|
|
|
|
write_lock(&call->state_lock);
|
|
|
|
|
|
- switch (call->state) {
|
|
|
+ state = call->state;
|
|
|
+ switch (state) {
|
|
|
case RXRPC_CALL_CLIENT_SEND_REQUEST:
|
|
|
case RXRPC_CALL_CLIENT_AWAIT_REPLY:
|
|
|
if (reply_begun)
|
|
|
- call->state = RXRPC_CALL_CLIENT_RECV_REPLY;
|
|
|
+ call->state = state = RXRPC_CALL_CLIENT_RECV_REPLY;
|
|
|
else
|
|
|
- call->state = RXRPC_CALL_CLIENT_AWAIT_REPLY;
|
|
|
+ call->state = state = RXRPC_CALL_CLIENT_AWAIT_REPLY;
|
|
|
break;
|
|
|
|
|
|
case RXRPC_CALL_SERVER_AWAIT_ACK:
|
|
|
__rxrpc_call_completed(call);
|
|
|
rxrpc_notify_socket(call);
|
|
|
+ state = call->state;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
@@ -302,11 +305,10 @@ static bool rxrpc_end_tx_phase(struct rxrpc_call *call, bool reply_begun,
|
|
|
}
|
|
|
|
|
|
write_unlock(&call->state_lock);
|
|
|
- if (call->state == RXRPC_CALL_CLIENT_AWAIT_REPLY) {
|
|
|
+ if (state == RXRPC_CALL_CLIENT_AWAIT_REPLY)
|
|
|
trace_rxrpc_transmit(call, rxrpc_transmit_await_reply);
|
|
|
- } else {
|
|
|
+ else
|
|
|
trace_rxrpc_transmit(call, rxrpc_transmit_end);
|
|
|
- }
|
|
|
_leave(" = ok");
|
|
|
return true;
|
|
|
|