Commit fe24a549 authored by David Howells's avatar David Howells Committed by Jakub Kicinski
Browse files

rxrpc: Send jumbo DATA packets



Send jumbo DATA packets if the path-MTU probing using padded PING ACK
packets shows up sufficient capacity to do so.  This allows larger chunks
of data to be sent without reducing the retryability as the subpackets in a
jumbo packet can also be retransmitted individually.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 0130eff9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -710,6 +710,7 @@ struct rxrpc_call {
	u16			tx_backoff;	/* Delay to insert due to Tx failure (ms) */
	u8			tx_winsize;	/* Maximum size of Tx window */
#define RXRPC_TX_MAX_WINDOW	128
	u8			tx_jumbo_max;	/* Maximum subpkts peer will accept */
	ktime_t			tx_last_sent;	/* Last time a transmission occurred */

	/* Received data tracking */
+1 −1
Original line number Diff line number Diff line
@@ -288,7 +288,7 @@ static void rxrpc_transmit_fresh_data(struct rxrpc_call *call)
		struct rxrpc_txqueue *tq;
		struct rxrpc_txbuf *txb;
		rxrpc_seq_t send_top, seq;
		int limit = min(space, 1);
		int limit = min(space, max(call->peer->pmtud_jumbo, 1));

		/* Order send_top before the contents of the new txbufs and
		 * txqueue pointers
+1 −0
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@ struct rxrpc_call *rxrpc_alloc_call(struct rxrpc_sock *rx, gfp_t gfp,
	refcount_set(&call->ref, 1);
	call->debug_id		= debug_id;
	call->tx_total_len	= -1;
	call->tx_jumbo_max	= 1;
	call->next_rx_timo	= 20 * HZ;
	call->next_req_timo	= 1 * HZ;
	call->ackr_window	= 1;
+3 −0
Original line number Diff line number Diff line
@@ -796,8 +796,11 @@ static void rxrpc_input_ack_trailer(struct rxrpc_call *call, struct sk_buff *skb
		peer->ackr_adv_pmtud = true;
	} else {
		peer->ackr_adv_pmtud = false;
		capacity = clamp(capacity, 1, jumbo_max);
	}

	call->tx_jumbo_max = capacity;

	if (wake)
		wake_up(&call->waitq);
}