Commit f789bff2 authored by David Howells's avatar David Howells
Browse files

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: default avatarDavid Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
parent a33395ab
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -1118,9 +1118,9 @@ TRACE_EVENT(rxrpc_tx_data,
TRACE_EVENT(rxrpc_tx_ack,
	    TP_PROTO(unsigned int call, rxrpc_serial_t 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(
		    __field(unsigned int,	call)
@@ -1129,6 +1129,7 @@ TRACE_EVENT(rxrpc_tx_ack,
		    __field(rxrpc_serial_t,	ack_serial)
		    __field(u8,			reason)
		    __field(u8,			n_acks)
		    __field(u16,		rwind)
			     ),

	    TP_fast_assign(
@@ -1138,15 +1139,17 @@ TRACE_EVENT(rxrpc_tx_ack,
		    __entry->ack_serial = ack_serial;
		    __entry->reason = reason;
		    __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->serial,
		      __print_symbolic(__entry->reason, rxrpc_ack_names),
		      __entry->ack_first,
		      __entry->ack_serial,
		      __entry->n_acks)
		      __entry->n_acks,
		      __entry->rwind)
	    );

TRACE_EVENT(rxrpc_receive,
+1 −1
Original line number Diff line number Diff line
@@ -163,7 +163,7 @@ void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
		trace_rxrpc_tx_ack(chan->call_debug_id, serial,
				   ntohl(pkt.ack.firstPacket),
				   ntohl(pkt.ack.serial),
				   pkt.ack.reason, 0);
				   pkt.ack.reason, 0, rxrpc_rx_window_size);
		break;

	default:
+7 −3
Original line number Diff line number Diff line
@@ -80,7 +80,8 @@ static void rxrpc_set_keepalive(struct rxrpc_call *call)
 */
static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
				 struct rxrpc_call *call,
				 struct rxrpc_txbuf *txb)
				 struct rxrpc_txbuf *txb,
				 u16 *_rwind)
{
	struct rxrpc_ackinfo ackinfo;
	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;
	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);
@@ -190,6 +192,7 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
	rxrpc_serial_t serial;
	size_t len, n;
	int ret, rtt_slot = -1;
	u16 rwind;

	if (test_bit(RXRPC_CALL_DISCONNECTED, &call->flags))
		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)
		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)
		return 0;

@@ -217,7 +220,8 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
	txb->wire.serial = htonl(serial);
	trace_rxrpc_tx_ack(call->debug_id, serial,
			   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)
		rtt_slot = rxrpc_begin_rtt_probe(call, serial, rxrpc_rtt_tx_ping);