rxrpc: Send an immediate ACK if we fill in a hole
Send an immediate ACK if we fill in a hole in the buffer left by an out-of-sequence packet. This may allow the congestion management in the peer to avoid a retransmission if packets got reordered on the wire. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
805b21b929
commit
a7056c5ba6
|
@ -331,8 +331,16 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb,
|
|||
call->rxtx_annotations[ix] = annotation;
|
||||
smp_wmb();
|
||||
call->rxtx_buffer[ix] = skb;
|
||||
if (after(seq, call->rx_top))
|
||||
if (after(seq, call->rx_top)) {
|
||||
smp_store_release(&call->rx_top, seq);
|
||||
} else if (before(seq, call->rx_top)) {
|
||||
/* Send an immediate ACK if we fill in a hole */
|
||||
if (!ack) {
|
||||
ack = RXRPC_ACK_DELAY;
|
||||
ack_serial = serial;
|
||||
}
|
||||
immediate_ack = true;
|
||||
}
|
||||
if (flags & RXRPC_LAST_PACKET) {
|
||||
set_bit(RXRPC_CALL_RX_LAST, &call->flags);
|
||||
trace_rxrpc_receive(call, rxrpc_receive_queue_last, serial, seq);
|
||||
|
|
Loading…
Reference in New Issue