rxrpc: Reinitialise the call ACK and timer state for client reply phase
[linux-block.git] / net / rxrpc / input.c
index 757c16f033a074d8c7a23a2d287d21833b322710..bda11eb2ab2ad2de51aded7542753495d8a52690 100644 (file)
@@ -149,6 +149,15 @@ static bool rxrpc_receiving_reply(struct rxrpc_call *call)
 {
        rxrpc_seq_t top = READ_ONCE(call->tx_top);
 
+       if (call->ackr_reason) {
+               spin_lock_bh(&call->lock);
+               call->ackr_reason = 0;
+               call->resend_at = call->expire_at;
+               call->ack_at = call->expire_at;
+               spin_unlock_bh(&call->lock);
+               rxrpc_set_timer(call, rxrpc_timer_init_for_reply);
+       }
+
        if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags))
                rxrpc_rotate_tx_window(call, top);
        if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {