input.c (a05754295e01f006a651eec759c5dbe682ef6cef) | input.c (adc9613ff66c26ebaff9814973181ac178beb90b) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* RxRPC packet reception 3 * 4 * Copyright (C) 2007, 2016 Red Hat, Inc. All Rights Reserved. 5 * Written by David Howells (dhowells@redhat.com) 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 889 unchanged lines hidden (view full) --- 898 ack_serial, true, true, 899 rxrpc_propose_ack_respond_to_ping); 900 } else if (sp->hdr.flags & RXRPC_REQUEST_ACK) { 901 rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED, 902 ack_serial, true, true, 903 rxrpc_propose_ack_respond_to_ack); 904 } 905 | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* RxRPC packet reception 3 * 4 * Copyright (C) 2007, 2016 Red Hat, Inc. All Rights Reserved. 5 * Written by David Howells (dhowells@redhat.com) 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 889 unchanged lines hidden (view full) --- 898 ack_serial, true, true, 899 rxrpc_propose_ack_respond_to_ping); 900 } else if (sp->hdr.flags & RXRPC_REQUEST_ACK) { 901 rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED, 902 ack_serial, true, true, 903 rxrpc_propose_ack_respond_to_ack); 904 } 905 |
906 /* If we get an EXCEEDS_WINDOW ACK from the server, it probably 907 * indicates that the client address changed due to NAT. The server 908 * lost the call because it switched to a different peer. 909 */ 910 if (unlikely(buf.ack.reason == RXRPC_ACK_EXCEEDS_WINDOW) && 911 first_soft_ack == 1 && 912 prev_pkt == 0 && 913 rxrpc_is_client_call(call)) { 914 rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED, 915 0, -ENETRESET); 916 return; 917 } 918 919 /* If we get an OUT_OF_SEQUENCE ACK from the server, that can also 920 * indicate a change of address. However, we can retransmit the call 921 * if we still have it buffered to the beginning. 922 */ 923 if (unlikely(buf.ack.reason == RXRPC_ACK_OUT_OF_SEQUENCE) && 924 first_soft_ack == 1 && 925 prev_pkt == 0 && 926 call->tx_hard_ack == 0 && 927 rxrpc_is_client_call(call)) { 928 rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED, 929 0, -ENETRESET); 930 return; 931 } 932 |
|
906 /* Discard any out-of-order or duplicate ACKs (outside lock). */ 907 if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) { 908 trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial, 909 first_soft_ack, call->ackr_first_seq, 910 prev_pkt, call->ackr_prev_seq); 911 return; 912 } 913 --- 553 unchanged lines hidden --- | 933 /* Discard any out-of-order or duplicate ACKs (outside lock). */ 934 if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) { 935 trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial, 936 first_soft_ack, call->ackr_first_seq, 937 prev_pkt, call->ackr_prev_seq); 938 return; 939 } 940 --- 553 unchanged lines hidden --- |