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:
David Howells 2024-01-26 16:17:03 +00:00 committed by Greg Kroah-Hartman
parent 438d7ceb45
commit 59881e57a7
5 changed files with 30 additions and 30 deletions

View File

@ -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") \

View File

@ -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,

View File

@ -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);

View File

@ -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);
} }
/* /*

View File

@ -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] */
}; };