rxrpc: Add a tracepoint to log which packets will be retransmitted
authorDavid Howells <dhowells@redhat.com>
Fri, 23 Sep 2016 12:58:55 +0000 (13:58 +0100)
committerDavid Howells <dhowells@redhat.com>
Fri, 23 Sep 2016 14:49:19 +0000 (15:49 +0100)
Add a tracepoint to log in rxrpc_resend() which packets will be
retransmitted.  Note that if a positive ACK comes in whilst we have dropped
the lock to retransmit another packet, the actual retransmission may not
happen, though some of the effects will (such as altering the congestion
management).

Signed-off-by: David Howells <dhowells@redhat.com>
include/trace/events/rxrpc.h
net/rxrpc/call_event.c

index d67a8c6b085a9f1ff39da426e487399d4b8baacd..56475497043d06b6e61b594e141daef653e5ac2f 100644 (file)
@@ -543,6 +543,33 @@ TRACE_EVENT(rxrpc_propose_ack,
                      rxrpc_propose_ack_outcomes[__entry->outcome])
            );
 
+TRACE_EVENT(rxrpc_retransmit,
+           TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t seq, u8 annotation,
+                    s64 expiry),
+
+           TP_ARGS(call, seq, annotation, expiry),
+
+           TP_STRUCT__entry(
+                   __field(struct rxrpc_call *,        call            )
+                   __field(rxrpc_seq_t,                seq             )
+                   __field(u8,                         annotation      )
+                   __field(s64,                        expiry          )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call = call;
+                   __entry->seq = seq;
+                   __entry->annotation = annotation;
+                   __entry->expiry = expiry;
+                          ),
+
+           TP_printk("c=%p q=%x a=%02x xp=%lld",
+                     __entry->call,
+                     __entry->seq,
+                     __entry->annotation,
+                     __entry->expiry)
+           );
+
 #endif /* _TRACE_RXRPC_H */
 
 /* This part must be outside protection */
index fd5b11339ffb9596d958a3073dc7c6ebfd56b05a..a78a92fe5d7776bfa9f13e83c574fba4a12d726c 100644 (file)
@@ -196,6 +196,8 @@ static void rxrpc_resend(struct rxrpc_call *call)
 
                /* Okay, we need to retransmit a packet. */
                call->rxtx_annotations[ix] = RXRPC_TX_ANNO_RETRANS | annotation;
+               trace_rxrpc_retransmit(call, seq, annotation | anno_type,
+                                      ktime_to_ns(ktime_sub(skb->tstamp, max_age)));
        }
 
        resend_at = ktime_sub(ktime_add_ms(oldest, rxrpc_resend_timeout), now);