mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
rxrpc: Fix the names of the fields in the ACK trailer struct
[ Upstream commit17469ae058
] 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:ba4e103848
("rxrpc: Fix congestion control algorithm") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
f94bf6ed8e
commit
690fcd688e
@ -83,7 +83,7 @@
|
||||
EM(rxrpc_badmsg_bad_abort, "bad-abort") \
|
||||
EM(rxrpc_badmsg_bad_jumbo, "bad-jumbo") \
|
||||
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_unsupported_packet, "unsup-pkt") \
|
||||
EM(rxrpc_badmsg_zero_call, "zero-call") \
|
||||
|
@ -88,7 +88,7 @@ void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
|
||||
struct rxrpc_ackpacket ack;
|
||||
};
|
||||
} __attribute__((packed)) pkt;
|
||||
struct rxrpc_ackinfo ack_info;
|
||||
struct rxrpc_acktrailer trailer;
|
||||
size_t len;
|
||||
int ret, ioc;
|
||||
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[1].iov_base = &padding;
|
||||
iov[1].iov_len = 3;
|
||||
iov[2].iov_base = &ack_info;
|
||||
iov[2].iov_len = sizeof(ack_info);
|
||||
iov[2].iov_base = &trailer;
|
||||
iov[2].iov_len = sizeof(trailer);
|
||||
|
||||
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.reason = skb ? RXRPC_ACK_DUPLICATE : RXRPC_ACK_IDLE;
|
||||
pkt.ack.nAcks = 0;
|
||||
ack_info.rxMTU = htonl(rxrpc_rx_mtu);
|
||||
ack_info.maxMTU = htonl(mtu);
|
||||
ack_info.rwind = htonl(rxrpc_rx_window_size);
|
||||
ack_info.jumbo_max = htonl(rxrpc_rx_jumbo_max);
|
||||
trailer.maxMTU = htonl(rxrpc_rx_mtu);
|
||||
trailer.ifMTU = htonl(mtu);
|
||||
trailer.rwind = htonl(rxrpc_rx_window_size);
|
||||
trailer.jumbo_max = htonl(rxrpc_rx_jumbo_max);
|
||||
pkt.whdr.flags |= RXRPC_SLOW_START_OK;
|
||||
padding = 0;
|
||||
iov[0].iov_len += sizeof(pkt.ack);
|
||||
len += sizeof(pkt.ack) + 3 + sizeof(ack_info);
|
||||
len += sizeof(pkt.ack) + 3 + sizeof(trailer);
|
||||
ioc = 3;
|
||||
|
||||
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
|
||||
*/
|
||||
static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
|
||||
struct rxrpc_ackinfo *ackinfo)
|
||||
static void rxrpc_input_ack_trailer(struct rxrpc_call *call, struct sk_buff *skb,
|
||||
struct rxrpc_acktrailer *trailer)
|
||||
{
|
||||
struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
|
||||
struct rxrpc_peer *peer;
|
||||
unsigned int mtu;
|
||||
bool wake = false;
|
||||
u32 rwind = ntohl(ackinfo->rwind);
|
||||
u32 rwind = ntohl(trailer->rwind);
|
||||
|
||||
if (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)
|
||||
call->cong_ssthresh = rwind;
|
||||
|
||||
mtu = min(ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU));
|
||||
mtu = min(ntohl(trailer->maxMTU), ntohl(trailer->ifMTU));
|
||||
|
||||
peer = call->peer;
|
||||
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_ackpacket ack;
|
||||
struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
|
||||
struct rxrpc_ackinfo info;
|
||||
struct rxrpc_acktrailer trailer;
|
||||
rxrpc_serial_t ack_serial, acked_serial;
|
||||
rxrpc_seq_t first_soft_ack, hard_ack, prev_pkt, since;
|
||||
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;
|
||||
}
|
||||
|
||||
info.rxMTU = 0;
|
||||
trailer.maxMTU = 0;
|
||||
ioffset = offset + nr_acks + 3;
|
||||
if (skb->len >= ioffset + sizeof(info) &&
|
||||
skb_copy_bits(skb, ioffset, &info, sizeof(info)) < 0)
|
||||
return rxrpc_proto_abort(call, 0, rxrpc_badmsg_short_ack_info);
|
||||
if (skb->len >= ioffset + sizeof(trailer) &&
|
||||
skb_copy_bits(skb, ioffset, &trailer, sizeof(trailer)) < 0)
|
||||
return rxrpc_proto_abort(call, 0, rxrpc_badmsg_short_ack_trailer);
|
||||
|
||||
if (nr_acks > 0)
|
||||
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. */
|
||||
if (info.rxMTU)
|
||||
rxrpc_input_ackinfo(call, skb, &info);
|
||||
if (trailer.maxMTU)
|
||||
rxrpc_input_ack_trailer(call, skb, &trailer);
|
||||
|
||||
if (first_soft_ack == 0)
|
||||
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,
|
||||
u16 *_rwind)
|
||||
{
|
||||
struct rxrpc_ackinfo ackinfo;
|
||||
struct rxrpc_acktrailer trailer;
|
||||
unsigned int qsize, sack, wrap, to;
|
||||
rxrpc_seq_t window, wtop;
|
||||
int rsize;
|
||||
@ -126,16 +126,16 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
|
||||
qsize = (window - 1) - call->rx_consumed;
|
||||
rsize = max_t(int, call->rx_winsize - qsize, 0);
|
||||
*_rwind = rsize;
|
||||
ackinfo.rxMTU = htonl(rxrpc_rx_mtu);
|
||||
ackinfo.maxMTU = htonl(mtu);
|
||||
ackinfo.rwind = htonl(rsize);
|
||||
ackinfo.jumbo_max = htonl(jmax);
|
||||
trailer.maxMTU = htonl(rxrpc_rx_mtu);
|
||||
trailer.ifMTU = htonl(mtu);
|
||||
trailer.rwind = htonl(rsize);
|
||||
trailer.jumbo_max = htonl(jmax);
|
||||
|
||||
*ackp++ = 0;
|
||||
*ackp++ = 0;
|
||||
*ackp++ = 0;
|
||||
memcpy(ackp, &ackinfo, sizeof(ackinfo));
|
||||
return txb->ack.nAcks + 3 + sizeof(ackinfo);
|
||||
memcpy(ackp, &trailer, sizeof(trailer));
|
||||
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
|
||||
*/
|
||||
struct rxrpc_ackinfo {
|
||||
__be32 rxMTU; /* maximum Rx MTU size (bytes) [AFS 3.3] */
|
||||
__be32 maxMTU; /* maximum interface MTU size (bytes) [AFS 3.3] */
|
||||
struct rxrpc_acktrailer {
|
||||
__be32 maxMTU; /* maximum Rx 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 jumbo_max; /* max packets to stick into a jumbo packet [AFS 3.5] */
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user