Skip to content

Commit 37e65dc

Browse files
committed
Merge tag 'rxrpc-rewrite-20170105' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs
David Howells says: ==================== rxrpc: Update tracing and proc interfaces This set of patches fixes and extends tracing: (1) Fix the handling of enum-to-string translations so that external tracing tools can make use of it by using TRACE_DEFINE_ENUM. (2) Extend a couple of tracepoints to export some extra available information and add three new tracepoints to allow monitoring of received DATA packets, call disconnection and improper/implicit call termination. and adds a bit more procfs-exported information: (3) Show a call's hard-ACK cursors in /proc/net/rxrpc_calls. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 5e6eb45 + 3e018da commit 37e65dc

File tree

8 files changed

+505
-410
lines changed

8 files changed

+505
-410
lines changed

include/trace/events/rxrpc.h

Lines changed: 492 additions & 26 deletions
Large diffs are not rendered by default.

net/rxrpc/ar-internal.h

Lines changed: 0 additions & 194 deletions
Original file line numberDiff line numberDiff line change
@@ -593,200 +593,6 @@ struct rxrpc_ack_summary {
593593
u8 cumulative_acks;
594594
};
595595

596-
enum rxrpc_skb_trace {
597-
rxrpc_skb_rx_cleaned,
598-
rxrpc_skb_rx_freed,
599-
rxrpc_skb_rx_got,
600-
rxrpc_skb_rx_lost,
601-
rxrpc_skb_rx_received,
602-
rxrpc_skb_rx_rotated,
603-
rxrpc_skb_rx_purged,
604-
rxrpc_skb_rx_seen,
605-
rxrpc_skb_tx_cleaned,
606-
rxrpc_skb_tx_freed,
607-
rxrpc_skb_tx_got,
608-
rxrpc_skb_tx_new,
609-
rxrpc_skb_tx_rotated,
610-
rxrpc_skb_tx_seen,
611-
rxrpc_skb__nr_trace
612-
};
613-
614-
extern const char rxrpc_skb_traces[rxrpc_skb__nr_trace][7];
615-
616-
enum rxrpc_conn_trace {
617-
rxrpc_conn_new_client,
618-
rxrpc_conn_new_service,
619-
rxrpc_conn_queued,
620-
rxrpc_conn_seen,
621-
rxrpc_conn_got,
622-
rxrpc_conn_put_client,
623-
rxrpc_conn_put_service,
624-
rxrpc_conn__nr_trace
625-
};
626-
627-
extern const char rxrpc_conn_traces[rxrpc_conn__nr_trace][4];
628-
629-
enum rxrpc_client_trace {
630-
rxrpc_client_activate_chans,
631-
rxrpc_client_alloc,
632-
rxrpc_client_chan_activate,
633-
rxrpc_client_chan_disconnect,
634-
rxrpc_client_chan_pass,
635-
rxrpc_client_chan_unstarted,
636-
rxrpc_client_cleanup,
637-
rxrpc_client_count,
638-
rxrpc_client_discard,
639-
rxrpc_client_duplicate,
640-
rxrpc_client_exposed,
641-
rxrpc_client_replace,
642-
rxrpc_client_to_active,
643-
rxrpc_client_to_culled,
644-
rxrpc_client_to_idle,
645-
rxrpc_client_to_inactive,
646-
rxrpc_client_to_waiting,
647-
rxrpc_client_uncount,
648-
rxrpc_client__nr_trace
649-
};
650-
651-
extern const char rxrpc_client_traces[rxrpc_client__nr_trace][7];
652-
extern const char rxrpc_conn_cache_states[RXRPC_CONN__NR_CACHE_STATES][5];
653-
654-
enum rxrpc_call_trace {
655-
rxrpc_call_new_client,
656-
rxrpc_call_new_service,
657-
rxrpc_call_queued,
658-
rxrpc_call_queued_ref,
659-
rxrpc_call_seen,
660-
rxrpc_call_connected,
661-
rxrpc_call_release,
662-
rxrpc_call_got,
663-
rxrpc_call_got_userid,
664-
rxrpc_call_got_kernel,
665-
rxrpc_call_put,
666-
rxrpc_call_put_userid,
667-
rxrpc_call_put_kernel,
668-
rxrpc_call_put_noqueue,
669-
rxrpc_call_error,
670-
rxrpc_call__nr_trace
671-
};
672-
673-
extern const char rxrpc_call_traces[rxrpc_call__nr_trace][4];
674-
675-
enum rxrpc_transmit_trace {
676-
rxrpc_transmit_wait,
677-
rxrpc_transmit_queue,
678-
rxrpc_transmit_queue_last,
679-
rxrpc_transmit_rotate,
680-
rxrpc_transmit_rotate_last,
681-
rxrpc_transmit_await_reply,
682-
rxrpc_transmit_end,
683-
rxrpc_transmit__nr_trace
684-
};
685-
686-
extern const char rxrpc_transmit_traces[rxrpc_transmit__nr_trace][4];
687-
688-
enum rxrpc_receive_trace {
689-
rxrpc_receive_incoming,
690-
rxrpc_receive_queue,
691-
rxrpc_receive_queue_last,
692-
rxrpc_receive_front,
693-
rxrpc_receive_rotate,
694-
rxrpc_receive_end,
695-
rxrpc_receive__nr_trace
696-
};
697-
698-
extern const char rxrpc_receive_traces[rxrpc_receive__nr_trace][4];
699-
700-
enum rxrpc_recvmsg_trace {
701-
rxrpc_recvmsg_enter,
702-
rxrpc_recvmsg_wait,
703-
rxrpc_recvmsg_dequeue,
704-
rxrpc_recvmsg_hole,
705-
rxrpc_recvmsg_next,
706-
rxrpc_recvmsg_cont,
707-
rxrpc_recvmsg_full,
708-
rxrpc_recvmsg_data_return,
709-
rxrpc_recvmsg_terminal,
710-
rxrpc_recvmsg_to_be_accepted,
711-
rxrpc_recvmsg_return,
712-
rxrpc_recvmsg__nr_trace
713-
};
714-
715-
extern const char rxrpc_recvmsg_traces[rxrpc_recvmsg__nr_trace][5];
716-
717-
enum rxrpc_rtt_tx_trace {
718-
rxrpc_rtt_tx_ping,
719-
rxrpc_rtt_tx_data,
720-
rxrpc_rtt_tx__nr_trace
721-
};
722-
723-
extern const char rxrpc_rtt_tx_traces[rxrpc_rtt_tx__nr_trace][5];
724-
725-
enum rxrpc_rtt_rx_trace {
726-
rxrpc_rtt_rx_ping_response,
727-
rxrpc_rtt_rx_requested_ack,
728-
rxrpc_rtt_rx__nr_trace
729-
};
730-
731-
extern const char rxrpc_rtt_rx_traces[rxrpc_rtt_rx__nr_trace][5];
732-
733-
enum rxrpc_timer_trace {
734-
rxrpc_timer_begin,
735-
rxrpc_timer_init_for_reply,
736-
rxrpc_timer_init_for_send_reply,
737-
rxrpc_timer_expired,
738-
rxrpc_timer_set_for_ack,
739-
rxrpc_timer_set_for_ping,
740-
rxrpc_timer_set_for_resend,
741-
rxrpc_timer_set_for_send,
742-
rxrpc_timer__nr_trace
743-
};
744-
745-
extern const char rxrpc_timer_traces[rxrpc_timer__nr_trace][8];
746-
747-
enum rxrpc_propose_ack_trace {
748-
rxrpc_propose_ack_client_tx_end,
749-
rxrpc_propose_ack_input_data,
750-
rxrpc_propose_ack_ping_for_lost_ack,
751-
rxrpc_propose_ack_ping_for_lost_reply,
752-
rxrpc_propose_ack_ping_for_params,
753-
rxrpc_propose_ack_processing_op,
754-
rxrpc_propose_ack_respond_to_ack,
755-
rxrpc_propose_ack_respond_to_ping,
756-
rxrpc_propose_ack_retry_tx,
757-
rxrpc_propose_ack_rotate_rx,
758-
rxrpc_propose_ack_terminal_ack,
759-
rxrpc_propose_ack__nr_trace
760-
};
761-
762-
enum rxrpc_propose_ack_outcome {
763-
rxrpc_propose_ack_use,
764-
rxrpc_propose_ack_update,
765-
rxrpc_propose_ack_subsume,
766-
rxrpc_propose_ack__nr_outcomes
767-
};
768-
769-
extern const char rxrpc_propose_ack_traces[rxrpc_propose_ack__nr_trace][8];
770-
extern const char *const rxrpc_propose_ack_outcomes[rxrpc_propose_ack__nr_outcomes];
771-
772-
enum rxrpc_congest_change {
773-
rxrpc_cong_begin_retransmission,
774-
rxrpc_cong_cleared_nacks,
775-
rxrpc_cong_new_low_nack,
776-
rxrpc_cong_no_change,
777-
rxrpc_cong_progress,
778-
rxrpc_cong_retransmit_again,
779-
rxrpc_cong_rtt_window_end,
780-
rxrpc_cong_saw_nack,
781-
rxrpc_congest__nr_change
782-
};
783-
784-
extern const char rxrpc_congest_modes[NR__RXRPC_CONGEST_MODES][10];
785-
extern const char rxrpc_congest_changes[rxrpc_congest__nr_change][9];
786-
787-
extern const char *const rxrpc_pkts[];
788-
extern const char rxrpc_ack_names[RXRPC_ACK__INVALID + 1][4];
789-
790596
#include <trace/events/rxrpc.h>
791597

792598
/*

net/rxrpc/call_object.c

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,6 @@ const char *const rxrpc_call_completions[NR__RXRPC_CALL_COMPLETIONS] = {
4343
[RXRPC_CALL_NETWORK_ERROR] = "NetError",
4444
};
4545

46-
const char rxrpc_call_traces[rxrpc_call__nr_trace][4] = {
47-
[rxrpc_call_new_client] = "NWc",
48-
[rxrpc_call_new_service] = "NWs",
49-
[rxrpc_call_queued] = "QUE",
50-
[rxrpc_call_queued_ref] = "QUR",
51-
[rxrpc_call_connected] = "CON",
52-
[rxrpc_call_release] = "RLS",
53-
[rxrpc_call_seen] = "SEE",
54-
[rxrpc_call_got] = "GOT",
55-
[rxrpc_call_got_userid] = "Gus",
56-
[rxrpc_call_got_kernel] = "Gke",
57-
[rxrpc_call_put] = "PUT",
58-
[rxrpc_call_put_userid] = "Pus",
59-
[rxrpc_call_put_kernel] = "Pke",
60-
[rxrpc_call_put_noqueue] = "PNQ",
61-
[rxrpc_call_error] = "*E*",
62-
};
63-
6446
struct kmem_cache *rxrpc_call_jar;
6547
LIST_HEAD(rxrpc_calls);
6648
DEFINE_RWLOCK(rxrpc_call_lock);

net/rxrpc/conn_client.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,6 @@ static void rxrpc_discard_expired_client_conns(struct work_struct *);
105105
static DECLARE_DELAYED_WORK(rxrpc_client_conn_reap,
106106
rxrpc_discard_expired_client_conns);
107107

108-
const char rxrpc_conn_cache_states[RXRPC_CONN__NR_CACHE_STATES][5] = {
109-
[RXRPC_CONN_CLIENT_INACTIVE] = "Inac",
110-
[RXRPC_CONN_CLIENT_WAITING] = "Wait",
111-
[RXRPC_CONN_CLIENT_ACTIVE] = "Actv",
112-
[RXRPC_CONN_CLIENT_CULLED] = "Cull",
113-
[RXRPC_CONN_CLIENT_IDLE] = "Idle",
114-
};
115-
116108
/*
117109
* Get a connection ID and epoch for a client connection from the global pool.
118110
* The connection struct pointer is then recorded in the idr radix tree. The

net/rxrpc/conn_object.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ void __rxrpc_disconnect_call(struct rxrpc_connection *conn,
173173
/* Save the result of the call so that we can repeat it if necessary
174174
* through the channel, whilst disposing of the actual call record.
175175
*/
176+
trace_rxrpc_disconnect_call(call);
176177
chan->last_service_id = call->service_id;
177178
if (call->abort_code) {
178179
chan->last_abort = call->abort_code;

net/rxrpc/input.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb,
481481
return rxrpc_proto_abort("LSA", call, seq);
482482
}
483483

484+
trace_rxrpc_rx_data(call, seq, serial, flags, annotation);
484485
if (before_eq(seq, hard_ack)) {
485486
ack = RXRPC_ACK_DUPLICATE;
486487
ack_serial = serial;
@@ -765,16 +766,9 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
765766
summary.ack_reason = (buf.ack.reason < RXRPC_ACK__INVALID ?
766767
buf.ack.reason : RXRPC_ACK__INVALID);
767768

768-
trace_rxrpc_rx_ack(call, first_soft_ack, summary.ack_reason, nr_acks);
769-
770-
_proto("Rx ACK %%%u { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }",
771-
sp->hdr.serial,
772-
ntohs(buf.ack.maxSkew),
773-
first_soft_ack,
774-
ntohl(buf.ack.previousPacket),
775-
acked_serial,
776-
rxrpc_ack_names[summary.ack_reason],
777-
buf.ack.nAcks);
769+
trace_rxrpc_rx_ack(call, sp->hdr.serial, acked_serial,
770+
first_soft_ack, ntohl(buf.ack.previousPacket),
771+
summary.ack_reason, nr_acks);
778772

779773
if (buf.ack.reason == RXRPC_ACK_PING_RESPONSE)
780774
rxrpc_input_ping_response(call, skb->tstamp, acked_serial,
@@ -931,7 +925,6 @@ static void rxrpc_input_call_packet(struct rxrpc_call *call,
931925
break;
932926

933927
default:
934-
_proto("Rx %s %%%u", rxrpc_pkts[sp->hdr.type], sp->hdr.serial);
935928
break;
936929
}
937930

@@ -961,6 +954,7 @@ static void rxrpc_input_implicit_end_call(struct rxrpc_connection *conn,
961954
break;
962955
}
963956

957+
trace_rxrpc_improper_term(call);
964958
__rxrpc_disconnect_call(conn, call);
965959
rxrpc_notify_socket(call);
966960
}

0 commit comments

Comments
 (0)