rxrpc: Trace ack.rwind
Log ack.rwind in the rxrpc_tx_ack tracepoint. This value is useful to see as it represents flow-control information to the peer. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: linux-afs@lists.infradead.org
This commit is contained in:
parent
a33395ab85
commit
f789bff2de
@ -1118,9 +1118,9 @@ TRACE_EVENT(rxrpc_tx_data,
|
|||||||
TRACE_EVENT(rxrpc_tx_ack,
|
TRACE_EVENT(rxrpc_tx_ack,
|
||||||
TP_PROTO(unsigned int call, rxrpc_serial_t serial,
|
TP_PROTO(unsigned int call, rxrpc_serial_t serial,
|
||||||
rxrpc_seq_t ack_first, rxrpc_serial_t ack_serial,
|
rxrpc_seq_t ack_first, rxrpc_serial_t ack_serial,
|
||||||
u8 reason, u8 n_acks),
|
u8 reason, u8 n_acks, u16 rwind),
|
||||||
|
|
||||||
TP_ARGS(call, serial, ack_first, ack_serial, reason, n_acks),
|
TP_ARGS(call, serial, ack_first, ack_serial, reason, n_acks, rwind),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(unsigned int, call)
|
__field(unsigned int, call)
|
||||||
@ -1129,6 +1129,7 @@ TRACE_EVENT(rxrpc_tx_ack,
|
|||||||
__field(rxrpc_serial_t, ack_serial)
|
__field(rxrpc_serial_t, ack_serial)
|
||||||
__field(u8, reason)
|
__field(u8, reason)
|
||||||
__field(u8, n_acks)
|
__field(u8, n_acks)
|
||||||
|
__field(u16, rwind)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
@ -1138,15 +1139,17 @@ TRACE_EVENT(rxrpc_tx_ack,
|
|||||||
__entry->ack_serial = ack_serial;
|
__entry->ack_serial = ack_serial;
|
||||||
__entry->reason = reason;
|
__entry->reason = reason;
|
||||||
__entry->n_acks = n_acks;
|
__entry->n_acks = n_acks;
|
||||||
|
__entry->rwind = rwind;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(" c=%08x ACK %08x %s f=%08x r=%08x n=%u",
|
TP_printk(" c=%08x ACK %08x %s f=%08x r=%08x n=%u rw=%u",
|
||||||
__entry->call,
|
__entry->call,
|
||||||
__entry->serial,
|
__entry->serial,
|
||||||
__print_symbolic(__entry->reason, rxrpc_ack_names),
|
__print_symbolic(__entry->reason, rxrpc_ack_names),
|
||||||
__entry->ack_first,
|
__entry->ack_first,
|
||||||
__entry->ack_serial,
|
__entry->ack_serial,
|
||||||
__entry->n_acks)
|
__entry->n_acks,
|
||||||
|
__entry->rwind)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(rxrpc_receive,
|
TRACE_EVENT(rxrpc_receive,
|
||||||
|
@ -163,7 +163,7 @@ void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
|
|||||||
trace_rxrpc_tx_ack(chan->call_debug_id, serial,
|
trace_rxrpc_tx_ack(chan->call_debug_id, serial,
|
||||||
ntohl(pkt.ack.firstPacket),
|
ntohl(pkt.ack.firstPacket),
|
||||||
ntohl(pkt.ack.serial),
|
ntohl(pkt.ack.serial),
|
||||||
pkt.ack.reason, 0);
|
pkt.ack.reason, 0, rxrpc_rx_window_size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -80,7 +80,8 @@ static void rxrpc_set_keepalive(struct rxrpc_call *call)
|
|||||||
*/
|
*/
|
||||||
static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
|
static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
|
||||||
struct rxrpc_call *call,
|
struct rxrpc_call *call,
|
||||||
struct rxrpc_txbuf *txb)
|
struct rxrpc_txbuf *txb,
|
||||||
|
u16 *_rwind)
|
||||||
{
|
{
|
||||||
struct rxrpc_ackinfo ackinfo;
|
struct rxrpc_ackinfo ackinfo;
|
||||||
unsigned int qsize, sack, wrap, to;
|
unsigned int qsize, sack, wrap, to;
|
||||||
@ -124,6 +125,7 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
|
|||||||
jmax = rxrpc_rx_jumbo_max;
|
jmax = rxrpc_rx_jumbo_max;
|
||||||
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;
|
||||||
ackinfo.rxMTU = htonl(rxrpc_rx_mtu);
|
ackinfo.rxMTU = htonl(rxrpc_rx_mtu);
|
||||||
ackinfo.maxMTU = htonl(mtu);
|
ackinfo.maxMTU = htonl(mtu);
|
||||||
ackinfo.rwind = htonl(rsize);
|
ackinfo.rwind = htonl(rsize);
|
||||||
@ -190,6 +192,7 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
|
|||||||
rxrpc_serial_t serial;
|
rxrpc_serial_t serial;
|
||||||
size_t len, n;
|
size_t len, n;
|
||||||
int ret, rtt_slot = -1;
|
int ret, rtt_slot = -1;
|
||||||
|
u16 rwind;
|
||||||
|
|
||||||
if (test_bit(RXRPC_CALL_DISCONNECTED, &call->flags))
|
if (test_bit(RXRPC_CALL_DISCONNECTED, &call->flags))
|
||||||
return -ECONNRESET;
|
return -ECONNRESET;
|
||||||
@ -205,7 +208,7 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
|
|||||||
if (txb->ack.reason == RXRPC_ACK_PING)
|
if (txb->ack.reason == RXRPC_ACK_PING)
|
||||||
txb->wire.flags |= RXRPC_REQUEST_ACK;
|
txb->wire.flags |= RXRPC_REQUEST_ACK;
|
||||||
|
|
||||||
n = rxrpc_fill_out_ack(conn, call, txb);
|
n = rxrpc_fill_out_ack(conn, call, txb, &rwind);
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -217,7 +220,8 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
|
|||||||
txb->wire.serial = htonl(serial);
|
txb->wire.serial = htonl(serial);
|
||||||
trace_rxrpc_tx_ack(call->debug_id, serial,
|
trace_rxrpc_tx_ack(call->debug_id, serial,
|
||||||
ntohl(txb->ack.firstPacket),
|
ntohl(txb->ack.firstPacket),
|
||||||
ntohl(txb->ack.serial), txb->ack.reason, txb->ack.nAcks);
|
ntohl(txb->ack.serial), txb->ack.reason, txb->ack.nAcks,
|
||||||
|
rwind);
|
||||||
|
|
||||||
if (txb->ack.reason == RXRPC_ACK_PING)
|
if (txb->ack.reason == RXRPC_ACK_PING)
|
||||||
rtt_slot = rxrpc_begin_rtt_probe(call, serial, rxrpc_rtt_tx_ping);
|
rtt_slot = rxrpc_begin_rtt_probe(call, serial, rxrpc_rtt_tx_ping);
|
||||||
|
Loading…
Reference in New Issue
Block a user