rxrpc: Allow tx_winsize to grow in response to an ACK

Allow tx_winsize to grow when the ACK info packet shows a larger receive
window at the other end rather than only permitting it to shrink.

Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
David Howells 2016-09-13 10:23:01 +01:00
parent 89a80ed4c0
commit 01fd074224

View File

@ -333,14 +333,16 @@ static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
struct rxrpc_skb_priv *sp = rxrpc_skb(skb); struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
struct rxrpc_peer *peer; struct rxrpc_peer *peer;
unsigned int mtu; unsigned int mtu;
u32 rwind = ntohl(ackinfo->rwind);
_proto("Rx ACK %%%u Info { rx=%u max=%u rwin=%u jm=%u }", _proto("Rx ACK %%%u Info { rx=%u max=%u rwin=%u jm=%u }",
sp->hdr.serial, sp->hdr.serial,
ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU), ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU),
ntohl(ackinfo->rwind), ntohl(ackinfo->jumbo_max)); rwind, ntohl(ackinfo->jumbo_max));
if (call->tx_winsize > ntohl(ackinfo->rwind)) if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
call->tx_winsize = ntohl(ackinfo->rwind); rwind = RXRPC_RXTX_BUFF_SIZE - 1;
call->tx_winsize = rwind;
mtu = min(ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU)); mtu = min(ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU));