rxrpc: Fix the names of the fields in the ACK trailer struct
[ Upstream commit 17469ae0582aaacad36e8e858f58b86c369f21ef ] From AFS-3.3 a trailer containing extra info was added to the ACK packet format - but AF_RXRPC has the names of some of the fields mixed up compared to other AFS implementations. Rename the struct and the fields to make them match. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: "David S. Miller" <davem@davemloft.net> cc: Eric Dumazet <edumazet@google.com> cc: Jakub Kicinski <kuba@kernel.org> cc: Paolo Abeni <pabeni@redhat.com> cc: linux-afs@lists.infradead.org cc: netdev@vger.kernel.org Stable-dep-of: ba4e103848d3 ("rxrpc: Fix congestion control algorithm") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
438d7ceb45
commit
59881e57a7
|
@ -83,7 +83,7 @@
|
||||||
EM(rxrpc_badmsg_bad_abort, "bad-abort") \
|
EM(rxrpc_badmsg_bad_abort, "bad-abort") \
|
||||||
EM(rxrpc_badmsg_bad_jumbo, "bad-jumbo") \
|
EM(rxrpc_badmsg_bad_jumbo, "bad-jumbo") \
|
||||||
EM(rxrpc_badmsg_short_ack, "short-ack") \
|
EM(rxrpc_badmsg_short_ack, "short-ack") \
|
||||||
EM(rxrpc_badmsg_short_ack_info, "short-ack-info") \
|
EM(rxrpc_badmsg_short_ack_trailer, "short-ack-trailer") \
|
||||||
EM(rxrpc_badmsg_short_hdr, "short-hdr") \
|
EM(rxrpc_badmsg_short_hdr, "short-hdr") \
|
||||||
EM(rxrpc_badmsg_unsupported_packet, "unsup-pkt") \
|
EM(rxrpc_badmsg_unsupported_packet, "unsup-pkt") \
|
||||||
EM(rxrpc_badmsg_zero_call, "zero-call") \
|
EM(rxrpc_badmsg_zero_call, "zero-call") \
|
||||||
|
|
|
@ -88,7 +88,7 @@ void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
|
||||||
struct rxrpc_ackpacket ack;
|
struct rxrpc_ackpacket ack;
|
||||||
};
|
};
|
||||||
} __attribute__((packed)) pkt;
|
} __attribute__((packed)) pkt;
|
||||||
struct rxrpc_ackinfo ack_info;
|
struct rxrpc_acktrailer trailer;
|
||||||
size_t len;
|
size_t len;
|
||||||
int ret, ioc;
|
int ret, ioc;
|
||||||
u32 serial, mtu, call_id, padding;
|
u32 serial, mtu, call_id, padding;
|
||||||
|
@ -122,8 +122,8 @@ void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
|
||||||
iov[0].iov_len = sizeof(pkt.whdr);
|
iov[0].iov_len = sizeof(pkt.whdr);
|
||||||
iov[1].iov_base = &padding;
|
iov[1].iov_base = &padding;
|
||||||
iov[1].iov_len = 3;
|
iov[1].iov_len = 3;
|
||||||
iov[2].iov_base = &ack_info;
|
iov[2].iov_base = &trailer;
|
||||||
iov[2].iov_len = sizeof(ack_info);
|
iov[2].iov_len = sizeof(trailer);
|
||||||
|
|
||||||
serial = rxrpc_get_next_serial(conn);
|
serial = rxrpc_get_next_serial(conn);
|
||||||
|
|
||||||
|
@ -158,14 +158,14 @@ void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
|
||||||
pkt.ack.serial = htonl(skb ? sp->hdr.serial : 0);
|
pkt.ack.serial = htonl(skb ? sp->hdr.serial : 0);
|
||||||
pkt.ack.reason = skb ? RXRPC_ACK_DUPLICATE : RXRPC_ACK_IDLE;
|
pkt.ack.reason = skb ? RXRPC_ACK_DUPLICATE : RXRPC_ACK_IDLE;
|
||||||
pkt.ack.nAcks = 0;
|
pkt.ack.nAcks = 0;
|
||||||
ack_info.rxMTU = htonl(rxrpc_rx_mtu);
|
trailer.maxMTU = htonl(rxrpc_rx_mtu);
|
||||||
ack_info.maxMTU = htonl(mtu);
|
trailer.ifMTU = htonl(mtu);
|
||||||
ack_info.rwind = htonl(rxrpc_rx_window_size);
|
trailer.rwind = htonl(rxrpc_rx_window_size);
|
||||||
ack_info.jumbo_max = htonl(rxrpc_rx_jumbo_max);
|
trailer.jumbo_max = htonl(rxrpc_rx_jumbo_max);
|
||||||
pkt.whdr.flags |= RXRPC_SLOW_START_OK;
|
pkt.whdr.flags |= RXRPC_SLOW_START_OK;
|
||||||
padding = 0;
|
padding = 0;
|
||||||
iov[0].iov_len += sizeof(pkt.ack);
|
iov[0].iov_len += sizeof(pkt.ack);
|
||||||
len += sizeof(pkt.ack) + 3 + sizeof(ack_info);
|
len += sizeof(pkt.ack) + 3 + sizeof(trailer);
|
||||||
ioc = 3;
|
ioc = 3;
|
||||||
|
|
||||||
trace_rxrpc_tx_ack(chan->call_debug_id, serial,
|
trace_rxrpc_tx_ack(chan->call_debug_id, serial,
|
||||||
|
|
|
@ -670,14 +670,14 @@ static void rxrpc_complete_rtt_probe(struct rxrpc_call *call,
|
||||||
/*
|
/*
|
||||||
* Process the extra information that may be appended to an ACK packet
|
* Process the extra information that may be appended to an ACK packet
|
||||||
*/
|
*/
|
||||||
static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
|
static void rxrpc_input_ack_trailer(struct rxrpc_call *call, struct sk_buff *skb,
|
||||||
struct rxrpc_ackinfo *ackinfo)
|
struct rxrpc_acktrailer *trailer)
|
||||||
{
|
{
|
||||||
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;
|
||||||
bool wake = false;
|
bool wake = false;
|
||||||
u32 rwind = ntohl(ackinfo->rwind);
|
u32 rwind = ntohl(trailer->rwind);
|
||||||
|
|
||||||
if (rwind > RXRPC_TX_MAX_WINDOW)
|
if (rwind > RXRPC_TX_MAX_WINDOW)
|
||||||
rwind = RXRPC_TX_MAX_WINDOW;
|
rwind = RXRPC_TX_MAX_WINDOW;
|
||||||
|
@ -691,7 +691,7 @@ static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
|
||||||
if (call->cong_ssthresh > rwind)
|
if (call->cong_ssthresh > rwind)
|
||||||
call->cong_ssthresh = rwind;
|
call->cong_ssthresh = rwind;
|
||||||
|
|
||||||
mtu = min(ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU));
|
mtu = min(ntohl(trailer->maxMTU), ntohl(trailer->ifMTU));
|
||||||
|
|
||||||
peer = call->peer;
|
peer = call->peer;
|
||||||
if (mtu < peer->maxdata) {
|
if (mtu < peer->maxdata) {
|
||||||
|
@ -837,7 +837,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
||||||
struct rxrpc_ack_summary summary = { 0 };
|
struct rxrpc_ack_summary summary = { 0 };
|
||||||
struct rxrpc_ackpacket ack;
|
struct rxrpc_ackpacket ack;
|
||||||
struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
|
struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
|
||||||
struct rxrpc_ackinfo info;
|
struct rxrpc_acktrailer trailer;
|
||||||
rxrpc_serial_t ack_serial, acked_serial;
|
rxrpc_serial_t ack_serial, acked_serial;
|
||||||
rxrpc_seq_t first_soft_ack, hard_ack, prev_pkt, since;
|
rxrpc_seq_t first_soft_ack, hard_ack, prev_pkt, since;
|
||||||
int nr_acks, offset, ioffset;
|
int nr_acks, offset, ioffset;
|
||||||
|
@ -917,11 +917,11 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
||||||
goto send_response;
|
goto send_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
info.rxMTU = 0;
|
trailer.maxMTU = 0;
|
||||||
ioffset = offset + nr_acks + 3;
|
ioffset = offset + nr_acks + 3;
|
||||||
if (skb->len >= ioffset + sizeof(info) &&
|
if (skb->len >= ioffset + sizeof(trailer) &&
|
||||||
skb_copy_bits(skb, ioffset, &info, sizeof(info)) < 0)
|
skb_copy_bits(skb, ioffset, &trailer, sizeof(trailer)) < 0)
|
||||||
return rxrpc_proto_abort(call, 0, rxrpc_badmsg_short_ack_info);
|
return rxrpc_proto_abort(call, 0, rxrpc_badmsg_short_ack_trailer);
|
||||||
|
|
||||||
if (nr_acks > 0)
|
if (nr_acks > 0)
|
||||||
skb_condense(skb);
|
skb_condense(skb);
|
||||||
|
@ -950,8 +950,8 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse rwind and mtu sizes if provided. */
|
/* Parse rwind and mtu sizes if provided. */
|
||||||
if (info.rxMTU)
|
if (trailer.maxMTU)
|
||||||
rxrpc_input_ackinfo(call, skb, &info);
|
rxrpc_input_ack_trailer(call, skb, &trailer);
|
||||||
|
|
||||||
if (first_soft_ack == 0)
|
if (first_soft_ack == 0)
|
||||||
return rxrpc_proto_abort(call, 0, rxrpc_eproto_ackr_zero);
|
return rxrpc_proto_abort(call, 0, rxrpc_eproto_ackr_zero);
|
||||||
|
|
|
@ -83,7 +83,7 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
|
||||||
struct rxrpc_txbuf *txb,
|
struct rxrpc_txbuf *txb,
|
||||||
u16 *_rwind)
|
u16 *_rwind)
|
||||||
{
|
{
|
||||||
struct rxrpc_ackinfo ackinfo;
|
struct rxrpc_acktrailer trailer;
|
||||||
unsigned int qsize, sack, wrap, to;
|
unsigned int qsize, sack, wrap, to;
|
||||||
rxrpc_seq_t window, wtop;
|
rxrpc_seq_t window, wtop;
|
||||||
int rsize;
|
int rsize;
|
||||||
|
@ -126,16 +126,16 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
|
||||||
qsize = (window - 1) - call->rx_consumed;
|
qsize = (window - 1) - call->rx_consumed;
|
||||||
rsize = max_t(int, call->rx_winsize - qsize, 0);
|
rsize = max_t(int, call->rx_winsize - qsize, 0);
|
||||||
*_rwind = rsize;
|
*_rwind = rsize;
|
||||||
ackinfo.rxMTU = htonl(rxrpc_rx_mtu);
|
trailer.maxMTU = htonl(rxrpc_rx_mtu);
|
||||||
ackinfo.maxMTU = htonl(mtu);
|
trailer.ifMTU = htonl(mtu);
|
||||||
ackinfo.rwind = htonl(rsize);
|
trailer.rwind = htonl(rsize);
|
||||||
ackinfo.jumbo_max = htonl(jmax);
|
trailer.jumbo_max = htonl(jmax);
|
||||||
|
|
||||||
*ackp++ = 0;
|
*ackp++ = 0;
|
||||||
*ackp++ = 0;
|
*ackp++ = 0;
|
||||||
*ackp++ = 0;
|
*ackp++ = 0;
|
||||||
memcpy(ackp, &ackinfo, sizeof(ackinfo));
|
memcpy(ackp, &trailer, sizeof(trailer));
|
||||||
return txb->ack.nAcks + 3 + sizeof(ackinfo);
|
return txb->ack.nAcks + 3 + sizeof(trailer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -135,9 +135,9 @@ struct rxrpc_ackpacket {
|
||||||
/*
|
/*
|
||||||
* ACK packets can have a further piece of information tagged on the end
|
* ACK packets can have a further piece of information tagged on the end
|
||||||
*/
|
*/
|
||||||
struct rxrpc_ackinfo {
|
struct rxrpc_acktrailer {
|
||||||
__be32 rxMTU; /* maximum Rx MTU size (bytes) [AFS 3.3] */
|
__be32 maxMTU; /* maximum Rx MTU size (bytes) [AFS 3.3] */
|
||||||
__be32 maxMTU; /* maximum interface MTU size (bytes) [AFS 3.3] */
|
__be32 ifMTU; /* maximum interface MTU size (bytes) [AFS 3.3] */
|
||||||
__be32 rwind; /* Rx window size (packets) [AFS 3.4] */
|
__be32 rwind; /* Rx window size (packets) [AFS 3.4] */
|
||||||
__be32 jumbo_max; /* max packets to stick into a jumbo packet [AFS 3.5] */
|
__be32 jumbo_max; /* max packets to stick into a jumbo packet [AFS 3.5] */
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue