rxrpc: Trace discarded ACKs
[ Upstream commit d1f129470e6cb79b8b97fecd12689f6eb49e27fe ] Add a tracepoint to track received ACKs that are discarded due to being outside of the Tx window. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d268f8ddbb
commit
db7a934a02
2 changed files with 45 additions and 2 deletions
|
@ -1549,6 +1549,41 @@ TRACE_EVENT(rxrpc_notify_socket,
|
|||
__entry->serial)
|
||||
);
|
||||
|
||||
TRACE_EVENT(rxrpc_rx_discard_ack,
|
||||
TP_PROTO(unsigned int debug_id, rxrpc_serial_t serial,
|
||||
rxrpc_seq_t first_soft_ack, rxrpc_seq_t call_ackr_first,
|
||||
rxrpc_seq_t prev_pkt, rxrpc_seq_t call_ackr_prev),
|
||||
|
||||
TP_ARGS(debug_id, serial, first_soft_ack, call_ackr_first,
|
||||
prev_pkt, call_ackr_prev),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, debug_id )
|
||||
__field(rxrpc_serial_t, serial )
|
||||
__field(rxrpc_seq_t, first_soft_ack)
|
||||
__field(rxrpc_seq_t, call_ackr_first)
|
||||
__field(rxrpc_seq_t, prev_pkt)
|
||||
__field(rxrpc_seq_t, call_ackr_prev)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->debug_id = debug_id;
|
||||
__entry->serial = serial;
|
||||
__entry->first_soft_ack = first_soft_ack;
|
||||
__entry->call_ackr_first = call_ackr_first;
|
||||
__entry->prev_pkt = prev_pkt;
|
||||
__entry->call_ackr_prev = call_ackr_prev;
|
||||
),
|
||||
|
||||
TP_printk("c=%08x r=%08x %08x<%08x %08x<%08x",
|
||||
__entry->debug_id,
|
||||
__entry->serial,
|
||||
__entry->first_soft_ack,
|
||||
__entry->call_ackr_first,
|
||||
__entry->prev_pkt,
|
||||
__entry->call_ackr_prev)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_RXRPC_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
|
|
@ -879,8 +879,12 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
|
|||
|
||||
/* Discard any out-of-order or duplicate ACKs (outside lock). */
|
||||
if (before(first_soft_ack, call->ackr_first_seq) ||
|
||||
before(prev_pkt, call->ackr_prev_seq))
|
||||
before(prev_pkt, call->ackr_prev_seq)) {
|
||||
trace_rxrpc_rx_discard_ack(call->debug_id, sp->hdr.serial,
|
||||
first_soft_ack, call->ackr_first_seq,
|
||||
prev_pkt, call->ackr_prev_seq);
|
||||
return;
|
||||
}
|
||||
|
||||
buf.info.rxMTU = 0;
|
||||
ioffset = offset + nr_acks + 3;
|
||||
|
@ -892,8 +896,12 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
|
|||
|
||||
/* Discard any out-of-order or duplicate ACKs (inside lock). */
|
||||
if (before(first_soft_ack, call->ackr_first_seq) ||
|
||||
before(prev_pkt, call->ackr_prev_seq))
|
||||
before(prev_pkt, call->ackr_prev_seq)) {
|
||||
trace_rxrpc_rx_discard_ack(call->debug_id, sp->hdr.serial,
|
||||
first_soft_ack, call->ackr_first_seq,
|
||||
prev_pkt, call->ackr_prev_seq);
|
||||
goto out;
|
||||
}
|
||||
call->acks_latest_ts = skb->tstamp;
|
||||
call->acks_latest = sp->hdr.serial;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue