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:
@@ -331,8 +331,16 @@ next_subpacket:
|
|||||||
call->rxtx_annotations[ix] = annotation;
|
call->rxtx_annotations[ix] = annotation;
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
call->rxtx_buffer[ix] = skb;
|
call->rxtx_buffer[ix] = skb;
|
||||||
if (after(seq, call->rx_top))
|
if (after(seq, call->rx_top)) {
|
||||||
smp_store_release(&call->rx_top, seq);
|
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) {
|
if (flags & RXRPC_LAST_PACKET) {
|
||||||
set_bit(RXRPC_CALL_RX_LAST, &call->flags);
|
set_bit(RXRPC_CALL_RX_LAST, &call->flags);
|
||||||
trace_rxrpc_receive(call, rxrpc_receive_queue_last, serial, seq);
|
trace_rxrpc_receive(call, rxrpc_receive_queue_last, serial, seq);
|
||||||
|
|||||||
Reference in New Issue
Block a user