From patchwork Fri Dec 15 17:01:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849258 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="glvxXkaA"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyxcX41qNz9t1t for ; Sat, 16 Dec 2017 04:04:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755691AbdLORC2 (ORCPT ); Fri, 15 Dec 2017 12:02:28 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:35052 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755510AbdLORCZ (ORCPT ); Fri, 15 Dec 2017 12:02:25 -0500 Received: by mail-pg0-f65.google.com with SMTP id q20so6182071pgv.2; Fri, 15 Dec 2017 09:02:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=yIOI8d/JjXJuGefregdOG4eFKnPqobXKatWwkjgs4ig=; b=glvxXkaAzE7sGtAiqWp8FPzXWUDYnmCnByqJxjSZwrjNwlw1jpLZDV4g4oDSZ5QjVo j6ul5A6HOjWBqMpC2dWUT1i2zAr28Qii4D/4k2+BGUlf5cDXHXq5LKjXq03V5awi4Xqx 3qGaQzUfBt2i5BQ4Xu4Oi69jciUWZXosrgvqzPwne50g3AZxuGmZjTJHv2O+xibbe/fP usXEZhuibidRTteMmM/aCYn73ID2yRB5hWZ0Ay53kk7qv2rp7ENF/zbrgsiSTDAFYpVT jx+q2ACempo35pCun3sRW/2QZWtBwlqGpokYrW/ypf+jqb7AeNrzMVAZVk+GdNSfIKQt jDxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=yIOI8d/JjXJuGefregdOG4eFKnPqobXKatWwkjgs4ig=; b=mUVGEvpoHw5pWnzMXMNKcum/lUgf4QwfanA/pYSWjDuOEJCoobNYUYVPu35SfdiZdX ahRn38iBgg+4EGgLjb4RssTWkUlHuMVFMd+hLI+yF1/8i9nEAHW25WiESwCArqg2E4pE 1R/z7JKO98yvZ6RoIWlaPw0bWMPqF+LB1Ooj+aNZDv7Hg3/o+3SolmrVlZlHByLvqhZB hrbdXX5b0I6dnRf5CjQ9SzOaYlMuCYZlvEF+0l4wWQhuJtsALD21EiW9XOhAs9ZqD9jz ycqVj1COI44wXJtEQeWKiEaYd1DFF9zaciF3mei3rRbLe+0Oi2zFXvYgSyqzjYlxySYI Nwzg== X-Gm-Message-State: AKGB3mLOfM0LoOTxn128X9kOrBwJE5vifrYmHXwV1xiSOC6d7bRs0HR7 a+jliiWz1poGxo/D58WvgmRWFVc8 X-Google-Smtp-Source: ACJfBotZINUuOJl6KAEP4oRtJxlkWESwPopqc7pbj3vEsvnimMlqMwi8Co79m34dPNPw9cknGEEQLw== X-Received: by 10.84.132.98 with SMTP id 89mr5876774ple.251.1513357344724; Fri, 15 Dec 2017 09:02:24 -0800 (PST) Received: from li1588-6.members.linode.com (li1588-6.members.linode.com. [139.162.104.6]) by smtp.gmail.com with ESMTPSA id v82sm14214495pfd.111.2017.12.15.09.02.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:02:23 -0800 (PST) From: Yafang Shao To: songliubraving@fb.com, davem@davemloft.net, marcelo.leitner@gmail.com, rostedt@goodmis.org Cc: bgregg@netflix.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Yafang Shao Subject: [PATCH v2 net-next 1/4] tcp: Export to userspace the TCP state names for the trace events Date: Sat, 16 Dec 2017 01:01:51 +0800 Message-Id: <1513357314-8402-2-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> References: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: "Steven Rostedt (VMware)" The TCP trace events (specifically tcp_set_state), maps emums to symbol names via __print_symbolic(). But this only works for reading trace events from the tracefs trace files. If perf or trace-cmd were to record these events, the event format file does not convert the enum names into numbers, and you get something like: __print_symbolic(REC->oldstate, { TCP_ESTABLISHED, "TCP_ESTABLISHED" }, { TCP_SYN_SENT, "TCP_SYN_SENT" }, { TCP_SYN_RECV, "TCP_SYN_RECV" }, { TCP_FIN_WAIT1, "TCP_FIN_WAIT1" }, { TCP_FIN_WAIT2, "TCP_FIN_WAIT2" }, { TCP_TIME_WAIT, "TCP_TIME_WAIT" }, { TCP_CLOSE, "TCP_CLOSE" }, { TCP_CLOSE_WAIT, "TCP_CLOSE_WAIT" }, { TCP_LAST_ACK, "TCP_LAST_ACK" }, { TCP_LISTEN, "TCP_LISTEN" }, { TCP_CLOSING, "TCP_CLOSING" }, { TCP_NEW_SYN_RECV, "TCP_NEW_SYN_RECV" }) Where trace-cmd and perf do not know the values of those enums. Use the TRACE_DEFINE_ENUM() macros that will have the trace events convert the enum strings into their values at system boot. This will allow perf and trace-cmd to see actual numbers and not enums: __print_symbolic(REC->oldstate, { 1, "TCP_ESTABLISHED" }, { 2, "TCP_SYN_SENT" }, { 3, "TCP_SYN_RECV" }, { 4, "TCP_FIN_WAIT1" }, { 5, "TCP_FIN_WAIT2" }, { 6, "TCP_TIME_WAIT" }, { 7, "TCP_CLOSE" }, { 8, "TCP_CLOSE_WAIT" }, { 9, "TCP_LAST_ACK" }, { 10, "TCP_LISTEN" }, { 11, "TCP_CLOSING" }, { 12, "TCP_NEW_SYN_RECV" }) Signed-off-by: Steven Rostedt (VMware) Acked-by: Song Liu Signed-off-by: Yafang Shao --- include/trace/events/tcp.h | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) -- 1.8.3.1 diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h index 07cccca..40240ac 100644 --- a/include/trace/events/tcp.h +++ b/include/trace/events/tcp.h @@ -9,21 +9,36 @@ #include #include +#define tcp_state_names \ + EM(TCP_ESTABLISHED) \ + EM(TCP_SYN_SENT) \ + EM(TCP_SYN_RECV) \ + EM(TCP_FIN_WAIT1) \ + EM(TCP_FIN_WAIT2) \ + EM(TCP_TIME_WAIT) \ + EM(TCP_CLOSE) \ + EM(TCP_CLOSE_WAIT) \ + EM(TCP_LAST_ACK) \ + EM(TCP_LISTEN) \ + EM(TCP_CLOSING) \ + EMe(TCP_NEW_SYN_RECV) \ + +/* enums need to be exported to user space */ +#undef EM +#undef EMe +#define EM(a) TRACE_DEFINE_ENUM(a); +#define EMe(a) TRACE_DEFINE_ENUM(a); + +tcp_state_names + +#undef EM +#undef EMe +#define EM(a) tcp_state_name(a), +#define EMe(a) tcp_state_name(a) + #define tcp_state_name(state) { state, #state } #define show_tcp_state_name(val) \ - __print_symbolic(val, \ - tcp_state_name(TCP_ESTABLISHED), \ - tcp_state_name(TCP_SYN_SENT), \ - tcp_state_name(TCP_SYN_RECV), \ - tcp_state_name(TCP_FIN_WAIT1), \ - tcp_state_name(TCP_FIN_WAIT2), \ - tcp_state_name(TCP_TIME_WAIT), \ - tcp_state_name(TCP_CLOSE), \ - tcp_state_name(TCP_CLOSE_WAIT), \ - tcp_state_name(TCP_LAST_ACK), \ - tcp_state_name(TCP_LISTEN), \ - tcp_state_name(TCP_CLOSING), \ - tcp_state_name(TCP_NEW_SYN_RECV)) + __print_symbolic(val, tcp_state_names) /* * tcp event with arguments sk and skb From patchwork Fri Dec 15 17:01:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849257 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="oyaPaOQC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyxbx4SlYz9sRg for ; Sat, 16 Dec 2017 04:04:13 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932736AbdLORDP (ORCPT ); Fri, 15 Dec 2017 12:03:15 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:38997 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755554AbdLORC2 (ORCPT ); Fri, 15 Dec 2017 12:02:28 -0500 Received: by mail-pg0-f65.google.com with SMTP id w7so6173320pgv.6; Fri, 15 Dec 2017 09:02:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=91ceMHygfHU4ueo4iEZZmow86k9ZHiTiYy9EVve5Y3I=; b=oyaPaOQCi7eMYMpitjsVh3LXR5bWRw2su50BVU4Q8BgCDe1zmOxXxcvpH3nYLfp8W/ A0s4k7mSZCRgsMkml8ieRNoKa5a3lvN1+aigyh3oUiY4SyPocGM0+w6lfYMzez1ZVDqa nfmVer+o33XleH/YcM9bVn0HbLTlsMzHuAgxcw8E6ftqHEbDVAej+i5Jvn9OOM6IEoYh rqK4i7uwIKSBnE9TOhLSBjf8pv3ILgaO75lVmzHj374WeSYEtjZ6bC+cJymS05Ag6qcD tC/OtG9DEa44Ed4Aw4Le6IYviTIq48jEyWAdql/Efb+Z5IYW1CUMlF3mBtqJOjOR+nxW ogQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=91ceMHygfHU4ueo4iEZZmow86k9ZHiTiYy9EVve5Y3I=; b=A5CF2rA15Vb1Q9zZG5CAG3k2to3OxnjYpu6+dBlTx9bFcKcN/ixi8JyGhZwgObjzij fhlgTpttJ+3Wp+18JjB/3mqiOQnDFhPGOdVNhVgFreoCecHMJB8+05t4WcwubePSzQgb LdYyPQ3XjrAG098l17lB14CQ1kf9dFoK7FEMK0B+gOjD1eavLYDrLAclsjhLMXCy2FeJ 50pSf0QJQAHZhJT1RWZqzRLDmUWbgXAO7W3jbVgBAcUsSUroNay1TvLORL9fPiHhn0I6 BgbwbWTC801gIz4ZB0+zYLhWSdZYHzlC6+rOUdZagLDGgLLiJFFbIewtNMlTH4WhE5xU fYjw== X-Gm-Message-State: AKGB3mLmKfh6IocDXD6ZeK4ekG0D0WmGJLwM206w7PKe5TtfYrRTaAh1 TJDxpnkV4cwKOh2jBTYytb4= X-Google-Smtp-Source: ACJfBot3/bjsH3rNOiTZ7DTQeR3AVgsOgNWL1joHXeCHSicsa5dxemi+I0ILY5N00TtIswbWlViA3A== X-Received: by 10.101.81.1 with SMTP id f1mr12721632pgq.24.1513357347849; Fri, 15 Dec 2017 09:02:27 -0800 (PST) Received: from li1588-6.members.linode.com (li1588-6.members.linode.com. [139.162.104.6]) by smtp.gmail.com with ESMTPSA id v82sm14214495pfd.111.2017.12.15.09.02.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:02:26 -0800 (PST) From: Yafang Shao To: songliubraving@fb.com, davem@davemloft.net, marcelo.leitner@gmail.com, rostedt@goodmis.org Cc: bgregg@netflix.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Yafang Shao Subject: [PATCH v2 net-next 2/4] net: tracepoint: replace tcp_set_state tracepoint with sock_set_state tracepoint Date: Sat, 16 Dec 2017 01:01:52 +0800 Message-Id: <1513357314-8402-3-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> References: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org As sk_state is a common field for struct sock, so the state transition should not be a TCP specific feature. So I rename tcp_set_state tracepoint to sock_set_state tracepoint with some minor changes and move it into file trace/events/sock.h. Two helpers are introduced to trace sk_state transition - void sk_state_store(struct sock *sk, int state); - void sk_set_state(struct sock *sk, int state); As trace header should not be included in other header files, so they are defined in sock.c. The protocol such as SCTP maybe compiled as a ko, hence export sk_set_state(). Signed-off-by: Yafang Shao --- include/net/sock.h | 15 +----- include/trace/events/sock.h | 106 ++++++++++++++++++++++++++++++++++++++++ include/trace/events/tcp.h | 91 ---------------------------------- net/core/sock.c | 13 +++++ net/ipv4/inet_connection_sock.c | 4 +- net/ipv4/inet_hashtables.c | 2 +- net/ipv4/tcp.c | 4 -- 7 files changed, 124 insertions(+), 111 deletions(-) -- 1.8.3.1 diff --git a/include/net/sock.h b/include/net/sock.h index 9a90472..988ce82 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2344,19 +2344,8 @@ static inline int sk_state_load(const struct sock *sk) return smp_load_acquire(&sk->sk_state); } -/** - * sk_state_store - update sk->sk_state - * @sk: socket pointer - * @newstate: new state - * - * Paired with sk_state_load(). Should be used in contexts where - * state change might impact lockless readers. - */ -static inline void sk_state_store(struct sock *sk, int newstate) -{ - smp_store_release(&sk->sk_state, newstate); -} - +void sk_state_store(struct sock *sk, int newstate); +void sk_set_state(struct sock *sk, int state); void sock_enable_timestamp(struct sock *sk, int flag); int sock_get_timestamp(struct sock *, struct timeval __user *); int sock_get_timestampns(struct sock *, struct timespec __user *); diff --git a/include/trace/events/sock.h b/include/trace/events/sock.h index ec4dade..61977e5 100644 --- a/include/trace/events/sock.h +++ b/include/trace/events/sock.h @@ -6,7 +6,49 @@ #define _TRACE_SOCK_H #include +#include #include +#include +#include + +#define inet_protocol_names \ + EM(IPPROTO_TCP) \ + EM(IPPROTO_DCCP) \ + EMe(IPPROTO_SCTP) + +#define tcp_state_names \ + EM(TCP_ESTABLISHED) \ + EM(TCP_SYN_SENT) \ + EM(TCP_SYN_RECV) \ + EM(TCP_FIN_WAIT1) \ + EM(TCP_FIN_WAIT2) \ + EM(TCP_TIME_WAIT) \ + EM(TCP_CLOSE) \ + EM(TCP_CLOSE_WAIT) \ + EM(TCP_LAST_ACK) \ + EM(TCP_LISTEN) \ + EM(TCP_CLOSING) \ + EMe(TCP_NEW_SYN_RECV) + +/* enums need to be exported to user space */ +#undef EM +#undef EMe +#define EM(a) TRACE_DEFINE_ENUM(a); +#define EMe(a) TRACE_DEFINE_ENUM(a); + +inet_protocol_names +tcp_state_names + +#undef EM +#undef EMe +#define EM(a) { a, #a }, +#define EMe(a) { a, #a } + +#define show_inet_protocol_name(val) \ + __print_symbolic(val, inet_protocol_names) + +#define show_tcp_state_name(val) \ + __print_symbolic(val, tcp_state_names) TRACE_EVENT(sock_rcvqueue_full, @@ -63,6 +105,70 @@ __entry->rmem_alloc) ); +TRACE_EVENT(sock_set_state, + + TP_PROTO(const struct sock *sk, const int oldstate, const int newstate), + + TP_ARGS(sk, oldstate, newstate), + + TP_STRUCT__entry( + __field(const void *, skaddr) + __field(int, oldstate) + __field(int, newstate) + __field(__u16, sport) + __field(__u16, dport) + __field(__u8, protocol) + __array(__u8, saddr, 4) + __array(__u8, daddr, 4) + __array(__u8, saddr_v6, 16) + __array(__u8, daddr_v6, 16) + ), + + TP_fast_assign( + struct inet_sock *inet = inet_sk(sk); + struct in6_addr *pin6; + __be32 *p32; + + __entry->skaddr = sk; + __entry->oldstate = oldstate; + __entry->newstate = newstate; + + __entry->protocol = sk->sk_protocol; + __entry->sport = ntohs(inet->inet_sport); + __entry->dport = ntohs(inet->inet_dport); + + p32 = (__be32 *) __entry->saddr; + *p32 = inet->inet_saddr; + + p32 = (__be32 *) __entry->daddr; + *p32 = inet->inet_daddr; + +#if IS_ENABLED(CONFIG_IPV6) + if (sk->sk_family == AF_INET6) { + pin6 = (struct in6_addr *)__entry->saddr_v6; + *pin6 = sk->sk_v6_rcv_saddr; + pin6 = (struct in6_addr *)__entry->daddr_v6; + *pin6 = sk->sk_v6_daddr; + } else +#endif + { + pin6 = (struct in6_addr *)__entry->saddr_v6; + ipv6_addr_set_v4mapped(inet->inet_saddr, pin6); + pin6 = (struct in6_addr *)__entry->daddr_v6; + ipv6_addr_set_v4mapped(inet->inet_daddr, pin6); + } + ), + + TP_printk("protocol=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4" + "saddrv6=%pI6c daddrv6=%pI6c oldstate=%s newstate=%s", + show_inet_protocol_name(__entry->protocol), + __entry->sport, __entry->dport, + __entry->saddr, __entry->daddr, + __entry->saddr_v6, __entry->daddr_v6, + show_tcp_state_name(__entry->oldstate), + show_tcp_state_name(__entry->newstate)) +); + #endif /* _TRACE_SOCK_H */ /* This part must be outside protection */ diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h index 40240ac..7399399 100644 --- a/include/trace/events/tcp.h +++ b/include/trace/events/tcp.h @@ -9,37 +9,6 @@ #include #include -#define tcp_state_names \ - EM(TCP_ESTABLISHED) \ - EM(TCP_SYN_SENT) \ - EM(TCP_SYN_RECV) \ - EM(TCP_FIN_WAIT1) \ - EM(TCP_FIN_WAIT2) \ - EM(TCP_TIME_WAIT) \ - EM(TCP_CLOSE) \ - EM(TCP_CLOSE_WAIT) \ - EM(TCP_LAST_ACK) \ - EM(TCP_LISTEN) \ - EM(TCP_CLOSING) \ - EMe(TCP_NEW_SYN_RECV) \ - -/* enums need to be exported to user space */ -#undef EM -#undef EMe -#define EM(a) TRACE_DEFINE_ENUM(a); -#define EMe(a) TRACE_DEFINE_ENUM(a); - -tcp_state_names - -#undef EM -#undef EMe -#define EM(a) tcp_state_name(a), -#define EMe(a) tcp_state_name(a) - -#define tcp_state_name(state) { state, #state } -#define show_tcp_state_name(val) \ - __print_symbolic(val, tcp_state_names) - /* * tcp event with arguments sk and skb * @@ -192,66 +161,6 @@ TP_ARGS(sk) ); -TRACE_EVENT(tcp_set_state, - - TP_PROTO(const struct sock *sk, const int oldstate, const int newstate), - - TP_ARGS(sk, oldstate, newstate), - - TP_STRUCT__entry( - __field(const void *, skaddr) - __field(int, oldstate) - __field(int, newstate) - __field(__u16, sport) - __field(__u16, dport) - __array(__u8, saddr, 4) - __array(__u8, daddr, 4) - __array(__u8, saddr_v6, 16) - __array(__u8, daddr_v6, 16) - ), - - TP_fast_assign( - struct inet_sock *inet = inet_sk(sk); - struct in6_addr *pin6; - __be32 *p32; - - __entry->skaddr = sk; - __entry->oldstate = oldstate; - __entry->newstate = newstate; - - __entry->sport = ntohs(inet->inet_sport); - __entry->dport = ntohs(inet->inet_dport); - - p32 = (__be32 *) __entry->saddr; - *p32 = inet->inet_saddr; - - p32 = (__be32 *) __entry->daddr; - *p32 = inet->inet_daddr; - -#if IS_ENABLED(CONFIG_IPV6) - if (sk->sk_family == AF_INET6) { - pin6 = (struct in6_addr *)__entry->saddr_v6; - *pin6 = sk->sk_v6_rcv_saddr; - pin6 = (struct in6_addr *)__entry->daddr_v6; - *pin6 = sk->sk_v6_daddr; - } else -#endif - { - pin6 = (struct in6_addr *)__entry->saddr_v6; - ipv6_addr_set_v4mapped(inet->inet_saddr, pin6); - pin6 = (struct in6_addr *)__entry->daddr_v6; - ipv6_addr_set_v4mapped(inet->inet_daddr, pin6); - } - ), - - TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c oldstate=%s newstate=%s", - __entry->sport, __entry->dport, - __entry->saddr, __entry->daddr, - __entry->saddr_v6, __entry->daddr_v6, - show_tcp_state_name(__entry->oldstate), - show_tcp_state_name(__entry->newstate)) -); - TRACE_EVENT(tcp_retransmit_synack, TP_PROTO(const struct sock *sk, const struct request_sock *req), diff --git a/net/core/sock.c b/net/core/sock.c index c0b5b2f..717f7f6 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2859,6 +2859,19 @@ int sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp) } EXPORT_SYMBOL(sock_get_timestampns); +void sk_state_store(struct sock *sk, int state) +{ + trace_sock_set_state(sk, sk->sk_state, state); + smp_store_release(&sk->sk_state, state); +} + +void sk_set_state(struct sock *sk, int state) +{ + trace_sock_set_state(sk, sk->sk_state, state); + sk->sk_state = state; +} +EXPORT_SYMBOL(sk_set_state); + void sock_enable_timestamp(struct sock *sk, int flag) { if (!sock_flag(sk, flag)) { diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 4ca46dc..001f7b0 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -783,7 +783,7 @@ struct sock *inet_csk_clone_lock(const struct sock *sk, if (newsk) { struct inet_connection_sock *newicsk = inet_csk(newsk); - newsk->sk_state = TCP_SYN_RECV; + sk_set_state(newsk, TCP_SYN_RECV); newicsk->icsk_bind_hash = NULL; inet_sk(newsk)->inet_dport = inet_rsk(req)->ir_rmt_port; @@ -888,7 +888,7 @@ int inet_csk_listen_start(struct sock *sk, int backlog) return 0; } - sk->sk_state = TCP_CLOSE; + sk_set_state(sk, TCP_CLOSE); return err; } EXPORT_SYMBOL_GPL(inet_csk_listen_start); diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index f6f5810..5973693 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c @@ -544,7 +544,7 @@ bool inet_ehash_nolisten(struct sock *sk, struct sock *osk) sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); } else { percpu_counter_inc(sk->sk_prot->orphan_count); - sk->sk_state = TCP_CLOSE; + sk_set_state(sk, TCP_CLOSE); sock_set_flag(sk, SOCK_DEAD); inet_csk_destroy_sock(sk); } diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index c470fec..df6da92 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -283,8 +283,6 @@ #include #include -#include - struct percpu_counter tcp_orphan_count; EXPORT_SYMBOL_GPL(tcp_orphan_count); @@ -2040,8 +2038,6 @@ void tcp_set_state(struct sock *sk, int state) { int oldstate = sk->sk_state; - trace_tcp_set_state(sk, oldstate, state); - switch (state) { case TCP_ESTABLISHED: if (oldstate != TCP_ESTABLISHED) From patchwork Fri Dec 15 17:01:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849255 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="gdgqrQSP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyxbl2b9Gz9sNw for ; Sat, 16 Dec 2017 04:04:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932686AbdLORCf (ORCPT ); Fri, 15 Dec 2017 12:02:35 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:43807 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755510AbdLORCb (ORCPT ); Fri, 15 Dec 2017 12:02:31 -0500 Received: by mail-pf0-f195.google.com with SMTP id e3so6543207pfi.10; Fri, 15 Dec 2017 09:02:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8PgcOPqGGnvmljEKNQibT0r1Cfe9bP5hltgW42df8jY=; b=gdgqrQSPZ8oRkBZ3ZH56tqpL24ijkvxxwS4bRV89+bjOVbTEEyYenP8zIc9uTHdzXy 4jao/XE7FI97Y+rjubTCHAvCus1X0oIC8yj7h6AQwPu44ajuHd0f+c8RrSUSfPerGPMa osFowA4+H+y4hYp5t61ySBg+P+2hf0A/KQDne1MNHVdJ4/i6hGLsXCCNgrzDEaaCJVc2 FiwvmS8FGKy7H8eIUsM3sWmUnsaSmoDp51fC2HIkr1P+JKJ2sDFd2QGMMI8K1SAXJFxO H0AsftOwKf5cS2n4Or2VwyOS9jVR9xlXSU7fP9mvwbG65r4fD6CmM2wxIYH3jkdHOxUw 027g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8PgcOPqGGnvmljEKNQibT0r1Cfe9bP5hltgW42df8jY=; b=PFep/f/vOGmabDaz/p2LskR7zGz8ZzX7sLoZGMh4Uq8nkmK43G0n+OvC0togbWxCwW OtQsslfxtrE4IpiBWrUQnfueT4cFIn71Ew96odvDtDmyJzc41+13QNZlZcDk22F2DYnA vNcTPE0EU47fGMdOItEe+3QAZBPZrEbUJAaz2pXS8MGLmZBrhcu+SCriACUOP5nKepcD zQHZoLgHC/Fq3s5eXjiX8kwyoUKFoc4yWc0UdbjIfOMNq/LQdBIrhqq5RUSxFlcfL/OC sByo4OeW7QNAVAjUqwzMKjijHXP5rwzEojfCxvZwLUHREPTATDVeoxUEhrnp54XVfJtM 0rZg== X-Gm-Message-State: AKGB3mKHZa3bDtoQcbiRFiq50a5HJdmCX9F9dx4cSwxySeLM71ppRkfU Sv2Q2y3QphK6tRgGc2vhaTk= X-Google-Smtp-Source: ACJfBouiIpXjEwJfetXyuGOvlePawuITUDpFi3SV8y5FBgjBPt9lHGeRV7Dv7aTRA1IWo1DydCvzBg== X-Received: by 10.159.204.146 with SMTP id t18mr14335054plo.236.1513357350553; Fri, 15 Dec 2017 09:02:30 -0800 (PST) Received: from li1588-6.members.linode.com (li1588-6.members.linode.com. [139.162.104.6]) by smtp.gmail.com with ESMTPSA id v82sm14214495pfd.111.2017.12.15.09.02.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:02:29 -0800 (PST) From: Yafang Shao To: songliubraving@fb.com, davem@davemloft.net, marcelo.leitner@gmail.com, rostedt@goodmis.org Cc: bgregg@netflix.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Yafang Shao Subject: [PATCH v2 net-next 3/4] net: tracepoint: using sock_set_state tracepoint to trace DCCP state transition Date: Sat, 16 Dec 2017 01:01:53 +0800 Message-Id: <1513357314-8402-4-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> References: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org With changes in inet_ files, DCCP state transitions are traced with sock_set_state tracepoint. Signed-off-by: Yafang Shao --- net/dccp/proto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 1.8.3.1 diff --git a/net/dccp/proto.c b/net/dccp/proto.c index 9d43c1f..2874faf 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c @@ -110,7 +110,7 @@ void dccp_set_state(struct sock *sk, const int state) /* Change state AFTER socket is unhashed to avoid closed * socket sitting in hash tables. */ - sk->sk_state = state; + sk_set_state(sk, state); } EXPORT_SYMBOL_GPL(dccp_set_state); From patchwork Fri Dec 15 17:01:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849256 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bzZvLMpG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyxbv6pgjz9sNw for ; Sat, 16 Dec 2017 04:04:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932722AbdLORCt (ORCPT ); Fri, 15 Dec 2017 12:02:49 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:41555 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755875AbdLORCe (ORCPT ); Fri, 15 Dec 2017 12:02:34 -0500 Received: by mail-pg0-f65.google.com with SMTP id o2so6171715pgc.8; Fri, 15 Dec 2017 09:02:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qkRK1DDwa6k/o9l2u/KVLFvTZnB+dq73BSYvrRA+uew=; b=bzZvLMpGu4xYVwKFNKzlKQVrv0o0bJtgdD/tU+7BTzLfA3NS7YaAn6yraSr5YllP+m KMTugGSJyTyKApn6oy1WoVf+0UVOyaPvfuChb5v3N8LmobN5uNw1ikj5RSBDMGrKwFLF s+kx6oh1/e+mISxCuxSnoQZu4oa1XY/GjosM0AWLzbaeXSrRaZ5BNq+T1Lo3bzPr3qXY IDic3FAxLm7aWaFeNOxhktrDgRAkbiTJmeWDfPqst+RndtosNP6fZYjFYwW7G0dqHa5e A+lE2ZdgGot3wPWFMajiM9F/DnH8kWRw7mZT2ZQojjAVM1yamVp9U49YOhmTnBtvVDP5 KQtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qkRK1DDwa6k/o9l2u/KVLFvTZnB+dq73BSYvrRA+uew=; b=gmPU2dJkuQWme7kJ9uX0pQ3lLwKDAR7bVairWHs21kyihx9iPXVQBd5xHGmRIG00Xt Q4/xkixOi8qbhZOj2eS5KVEtrAzbfmJHuALkw0OcbOnzIBq1QpDydjNsb2N9toZWvSQF LfBLXwQCdkiOY6X69MDI0v65OcPKLQtCjR+P77gWoWiVDmPkn59GiVpRNLmAQmy15ZeU dZYl9Fd1/RO2RgfVwTFeimiyAwDVQr2p9m6+A4aI4V1XFISoWNxnSqoq4TjB9JAHKw4G e2YW3EBJYA8WBFgmCcKzasrGmzfhZ+pxSmYVMSBgj2GtxPj3aVQ+14oEuPxoOOsWkgFl TKAw== X-Gm-Message-State: AKGB3mL3XD9JbcOIUQoyutfcFXMFy5GyRUTuPimZDzuT2BDdqa6ccWvH XwtBK5Rht+N7SGdkTXp4Yk0= X-Google-Smtp-Source: ACJfBovSki2wif9zOZnQz/4wjApr3P90g5ACZgRszS3cca7aJHjwbOrwiU+BHYPIk+MeDjNIbvqddA== X-Received: by 10.99.111.4 with SMTP id k4mr12863620pgc.101.1513357353318; Fri, 15 Dec 2017 09:02:33 -0800 (PST) Received: from li1588-6.members.linode.com (li1588-6.members.linode.com. [139.162.104.6]) by smtp.gmail.com with ESMTPSA id v82sm14214495pfd.111.2017.12.15.09.02.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:02:32 -0800 (PST) From: Yafang Shao To: songliubraving@fb.com, davem@davemloft.net, marcelo.leitner@gmail.com, rostedt@goodmis.org Cc: bgregg@netflix.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Yafang Shao Subject: [PATCH v2 net-next 4/4] net: tracepoint: using sock_set_state tracepoint to trace SCTP state transition Date: Sat, 16 Dec 2017 01:01:54 +0800 Message-Id: <1513357314-8402-5-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> References: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org With changes in inet_ files, SCTP state transitions are traced with sockt_set_state tracepoint. Signed-off-by: Yafang Shao --- net/sctp/endpointola.c | 2 +- net/sctp/sm_sideeffect.c | 4 ++-- net/sctp/socket.c | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) -- 1.8.3.1 diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c index ee1e601..5e129df 100644 --- a/net/sctp/endpointola.c +++ b/net/sctp/endpointola.c @@ -232,7 +232,7 @@ void sctp_endpoint_free(struct sctp_endpoint *ep) { ep->base.dead = true; - ep->base.sk->sk_state = SCTP_SS_CLOSED; + sk_set_state(ep->base.sk, SCTP_SS_CLOSED); /* Unlink this endpoint, so we can't find it again! */ sctp_unhash_endpoint(ep); diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c index 8adde71..22ab3b4 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c @@ -878,12 +878,12 @@ static void sctp_cmd_new_state(struct sctp_cmd_seq *cmds, * successfully completed a connect() call. */ if (sctp_state(asoc, ESTABLISHED) && sctp_sstate(sk, CLOSED)) - sk->sk_state = SCTP_SS_ESTABLISHED; + sk_set_state(sk, SCTP_SS_ESTABLISHED); /* Set the RCV_SHUTDOWN flag when a SHUTDOWN is received. */ if (sctp_state(asoc, SHUTDOWN_RECEIVED) && sctp_sstate(sk, ESTABLISHED)) { - sk->sk_state = SCTP_SS_CLOSING; + sk_set_state(sk, SCTP_SS_CLOSING); sk->sk_shutdown |= RCV_SHUTDOWN; } } diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 7eec0a0..ecb532c 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -1544,7 +1544,7 @@ static void sctp_close(struct sock *sk, long timeout) lock_sock_nested(sk, SINGLE_DEPTH_NESTING); sk->sk_shutdown = SHUTDOWN_MASK; - sk->sk_state = SCTP_SS_CLOSING; + sk_set_state(sk, SCTP_SS_CLOSING); ep = sctp_sk(sk)->ep; @@ -4653,7 +4653,7 @@ static void sctp_shutdown(struct sock *sk, int how) if (how & SEND_SHUTDOWN && !list_empty(&ep->asocs)) { struct sctp_association *asoc; - sk->sk_state = SCTP_SS_CLOSING; + sk_set_state(sk, SCTP_SS_CLOSING); asoc = list_entry(ep->asocs.next, struct sctp_association, asocs); sctp_primitive_SHUTDOWN(net, asoc, NULL); @@ -7509,13 +7509,13 @@ static int sctp_listen_start(struct sock *sk, int backlog) * sockets. * */ - sk->sk_state = SCTP_SS_LISTENING; + sk_set_state(sk, SCTP_SS_LISTENING); if (!ep->base.bind_addr.port) { if (sctp_autobind(sk)) return -EAGAIN; } else { if (sctp_get_port(sk, inet_sk(sk)->inet_num)) { - sk->sk_state = SCTP_SS_CLOSED; + sk_set_state(sk, SCTP_SS_CLOSED); return -EADDRINUSE; } } @@ -8538,10 +8538,10 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk, * is called, set RCV_SHUTDOWN flag. */ if (sctp_state(assoc, CLOSED) && sctp_style(newsk, TCP)) { - newsk->sk_state = SCTP_SS_CLOSED; + sk_set_state(newsk, SCTP_SS_CLOSED); newsk->sk_shutdown |= RCV_SHUTDOWN; } else { - newsk->sk_state = SCTP_SS_ESTABLISHED; + sk_set_state(newsk, SCTP_SS_ESTABLISHED); } release_sock(newsk);