mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
rxrpc: Clean up Tx header flags generation handling
Clean up the generation of the header flags when building packet headers
for transmission:
(1) Assemble the flags in a local variable rather than in the txb->flags.
(2) Do the flags masking and JUMBO-PACKET setting in one bit of code for
both the main header and the jumbo headers.
(3) Generate the REQUEST-ACK flag afresh each time. There's a possibility
we might want to do jumbo retransmission packets in future.
(4) Pass the local flags variable to the rxrpc_tx_data tracepoint rather
than the combination of the txb flags and the wire header flags (the
latter belong only to the first subpacket).
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20241204074710.990092-5-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
29e03ec757
commit
efa95c3235
|
|
@ -452,7 +452,6 @@
|
|||
|
||||
#define rxrpc_req_ack_traces \
|
||||
EM(rxrpc_reqack_ack_lost, "ACK-LOST ") \
|
||||
EM(rxrpc_reqack_already_on, "ALREADY-ON") \
|
||||
EM(rxrpc_reqack_more_rtt, "MORE-RTT ") \
|
||||
EM(rxrpc_reqack_no_srv_last, "NO-SRVLAST") \
|
||||
EM(rxrpc_reqack_old_rtt, "OLD-RTT ") \
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ struct rxrpc_net {
|
|||
atomic_t stat_tx_acks[256];
|
||||
atomic_t stat_rx_acks[256];
|
||||
|
||||
atomic_t stat_why_req_ack[8];
|
||||
atomic_t stat_why_req_ack[7];
|
||||
|
||||
atomic_t stat_io_loop;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -330,6 +330,8 @@ static void rxrpc_prepare_data_subpacket(struct rxrpc_call *call, struct rxrpc_t
|
|||
struct rxrpc_wire_header *whdr = txb->kvec[0].iov_base;
|
||||
enum rxrpc_req_ack_trace why;
|
||||
struct rxrpc_connection *conn = call->conn;
|
||||
bool last;
|
||||
u8 flags;
|
||||
|
||||
_enter("%x,{%d}", txb->seq, txb->len);
|
||||
|
||||
|
|
@ -339,6 +341,10 @@ static void rxrpc_prepare_data_subpacket(struct rxrpc_call *call, struct rxrpc_t
|
|||
txb->seq == 1)
|
||||
whdr->userStatus = RXRPC_USERSTATUS_SERVICE_UPGRADE;
|
||||
|
||||
txb->flags &= ~RXRPC_REQUEST_ACK;
|
||||
flags = txb->flags & RXRPC_TXBUF_WIRE_FLAGS;
|
||||
last = txb->flags & RXRPC_LAST_PACKET;
|
||||
|
||||
/* If our RTT cache needs working on, request an ACK. Also request
|
||||
* ACKs if a DATA packet appears to have been lost.
|
||||
*
|
||||
|
|
@ -346,9 +352,7 @@ static void rxrpc_prepare_data_subpacket(struct rxrpc_call *call, struct rxrpc_t
|
|||
* service call, lest OpenAFS incorrectly send us an ACK with some
|
||||
* soft-ACKs in it and then never follow up with a proper hard ACK.
|
||||
*/
|
||||
if (txb->flags & RXRPC_REQUEST_ACK)
|
||||
why = rxrpc_reqack_already_on;
|
||||
else if ((txb->flags & RXRPC_LAST_PACKET) && rxrpc_sending_to_client(txb))
|
||||
if (last && rxrpc_sending_to_client(txb))
|
||||
why = rxrpc_reqack_no_srv_last;
|
||||
else if (test_and_clear_bit(RXRPC_CALL_EV_ACK_LOST, &call->events))
|
||||
why = rxrpc_reqack_ack_lost;
|
||||
|
|
@ -367,15 +371,17 @@ static void rxrpc_prepare_data_subpacket(struct rxrpc_call *call, struct rxrpc_t
|
|||
|
||||
rxrpc_inc_stat(call->rxnet, stat_why_req_ack[why]);
|
||||
trace_rxrpc_req_ack(call->debug_id, txb->seq, why);
|
||||
if (why != rxrpc_reqack_no_srv_last)
|
||||
if (why != rxrpc_reqack_no_srv_last) {
|
||||
txb->flags |= RXRPC_REQUEST_ACK;
|
||||
flags |= RXRPC_REQUEST_ACK;
|
||||
}
|
||||
dont_set_request_ack:
|
||||
|
||||
whdr->flags = txb->flags & RXRPC_TXBUF_WIRE_FLAGS;
|
||||
whdr->flags = flags;
|
||||
whdr->serial = htonl(txb->serial);
|
||||
whdr->cksum = txb->cksum;
|
||||
|
||||
trace_rxrpc_tx_data(call, txb->seq, txb->serial, txb->flags, false);
|
||||
trace_rxrpc_tx_data(call, txb->seq, txb->serial, flags, false);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -519,9 +519,8 @@ int rxrpc_stats_show(struct seq_file *seq, void *v)
|
|||
atomic_read(&rxnet->stat_rx_acks[RXRPC_ACK_DELAY]),
|
||||
atomic_read(&rxnet->stat_rx_acks[RXRPC_ACK_IDLE]));
|
||||
seq_printf(seq,
|
||||
"Why-Req-A: acklost=%u already=%u mrtt=%u ortt=%u\n",
|
||||
"Why-Req-A: acklost=%u mrtt=%u ortt=%u\n",
|
||||
atomic_read(&rxnet->stat_why_req_ack[rxrpc_reqack_ack_lost]),
|
||||
atomic_read(&rxnet->stat_why_req_ack[rxrpc_reqack_already_on]),
|
||||
atomic_read(&rxnet->stat_why_req_ack[rxrpc_reqack_more_rtt]),
|
||||
atomic_read(&rxnet->stat_why_req_ack[rxrpc_reqack_old_rtt]));
|
||||
seq_printf(seq,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user