From patchwork Fri Dec 15 17:56:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849332 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="uiRYhVXC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyypq62GMz9s03 for ; Sat, 16 Dec 2017 04:58:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755955AbdLOR5X (ORCPT ); Fri, 15 Dec 2017 12:57:23 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:46600 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755820AbdLOR5R (ORCPT ); Fri, 15 Dec 2017 12:57:17 -0500 Received: by mail-pg0-f65.google.com with SMTP id b11so6259485pgu.13; Fri, 15 Dec 2017 09:57:16 -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=uiRYhVXC/S6R4LzFzH3WJLSBUnVQEc7bnrzWqZa8PKbVX78xSmItWpd8g5xi00gw5L XI3mbJozoLzn4JzL6luD9+fmw9FXXyub/I7Z4RomaUXIJRVGG4i4s0g61VrMIV78gO0i WoDT4KkEl7EoH23Mfa+QPURxieRqaR0jwgP402rriYgal5m0SP8gAUAC9jZvs/41y9Rm PqJ1DY1dQLiFMx1eH334CBXN7ixOujJ2CT7p2uhkxkjmZGrr328DeqoielTDW2VcxiD9 RVh0CYoxs3n0vGZt/daCURVK9mkfBBYmm/9/MZSy5ibe+LYhTyi3JfhhZMYagF57LXc/ e6+A== 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=dnf8xUmeKuAT7MK5rjGuy4N5KYVRRq2OM+D7x44I92NJ6o5zFIDz9KN5rX8dBIwCgp bw3F+tpXxzj43Tk5rYoiokIF0FB/T6LOa0MgqkTq+mzLNkiLbVZZMB1sLJ7En0LTIekC QOydztgdRminFqEJ0M5gJbPnBWKvgXftDCb7t9MwtPIynsXvBcvJG46kSVj3uTDf0QI1 jE9M0HOQGrsDo1ei3A3nPMVNhEmWGe1HioA5P4TybMKgjYbrct4t3qdiEC1rfQ4EWjnp 7UZ82zuZMvvaGMZVjMO/i2HkZIvqyqKmlFH7kThtU8JYVmNuhMXUGTYnJHltoCg2SciI NdZA== X-Gm-Message-State: AKGB3mKyLy6YFBnEe+8JSs9zePWi/GCnfXrSAgjhaPJmBdoRICb6ElAG RjBtK6hWXRUZxhy7aKOwN0U= X-Google-Smtp-Source: ACJfBov7FiUU8GjqPZOdUbYsYW9o24l8fEFwsudCZD2saq3J0N8xOafX5JKLq+TPC7F+UiRw3T0ocQ== X-Received: by 10.99.153.2 with SMTP id d2mr12430754pge.379.1513360636159; Fri, 15 Dec 2017 09:57:16 -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 u68sm13242329pfu.17.2017.12.15.09.57.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:57:15 -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:56:48 +0800 Message-Id: <1513360611-11392-2-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513360611-11392-1-git-send-email-laoar.shao@gmail.com> References: <1513360611-11392-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:56:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849331 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="aULAMkym"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyypg3dfGz9s03 for ; Sat, 16 Dec 2017 04:58:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756076AbdLOR5b (ORCPT ); Fri, 15 Dec 2017 12:57:31 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:38945 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755864AbdLOR5X (ORCPT ); Fri, 15 Dec 2017 12:57:23 -0500 Received: by mail-pf0-f194.google.com with SMTP id l24so6655090pfj.6; Fri, 15 Dec 2017 09:57:23 -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=aULAMkymEjFXsW/BlIrar1lNCFHcSJ/Jx4W9iAhFLwSByzkQTzrllFDnQ3zXMt2niX 7dbEG4q9tEkhzv4MRhEEiWO9Kj/iUrqofQhYZxjBoAm5X1xdymtYbGpA85ZKp1SgdjOx xnJVuJwoyRaJVQypjlgoei/9AI407RlDad5ZJYcBm2SHpPAccg4WASXZ9v9mphgMvPJl fnhwgzCVRP+JsYHH6fz97BbU2gMQLuqXOleRyYS+wDr8KLgV+Iri14NJD0jZXE3iUaMb l2lRG+M6S/Rd1oPGuL0IsnMauPjskczfYkX5qeqVw3ZFfp9veIk4HL+au4EvLC1bxDTq R8DQ== 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=McSlZFRugGY3KNq/tLs8FgwJ0oYifIrwe8XQ2cfnRpLr6RCgwvL+DSviOULCZuiHC9 yDAi83bfz1oUWpI9plUE4OQt8a7H/kyGtpMU+tgYJqv29eNGFPGgpzEvTw7GHUzeS0Ss XL6HVjt7Ec3KjZaTcbqPg7eB5X7lkYxEMDh8WctaC68ckxvYgY6WfVuGrQi5WJ9hKSoW NnCaE4lP3Z1jHfvdDFlGS/WiCV16rwczkIPB6I8ljSzNtxxJAQc/DCSPNrqpob4c15JA GbFhjbTZD7J/DfsAUJf3PNxVWW4YYur40QPTZyhvYluk3d9DfizVhYFiAAtAHSFNTVP0 D6lg== X-Gm-Message-State: AKGB3mIc8qucMWf2c+Emxu1dgAJ5wT6ESbtBJV5fZgQXSoySWfJExLyA fGX93mI+tV18DeRN8ubSAZ4= X-Google-Smtp-Source: ACJfBovIL6fgmui6XwOE3iiZNNoGHBC3DGsCehkf1zbZLH9kATsn1Eo0Zi63kjy7+pY0s2Cv5vEpoA== X-Received: by 10.99.152.25 with SMTP id q25mr12616882pgd.245.1513360643079; Fri, 15 Dec 2017 09:57:23 -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 u68sm13242329pfu.17.2017.12.15.09.57.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:57:22 -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:56:49 +0800 Message-Id: <1513360611-11392-3-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513360611-11392-1-git-send-email-laoar.shao@gmail.com> References: <1513360611-11392-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:56:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849330 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="Tt3KJnI1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyypJ6nhMz9s03 for ; Sat, 16 Dec 2017 04:58:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756228AbdLOR5p (ORCPT ); Fri, 15 Dec 2017 12:57:45 -0500 Received: from mail-pg0-f68.google.com ([74.125.83.68]:41745 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756045AbdLOR5b (ORCPT ); Fri, 15 Dec 2017 12:57:31 -0500 Received: by mail-pg0-f68.google.com with SMTP id o2so6268919pgc.8; Fri, 15 Dec 2017 09:57: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=Tt3KJnI1Ln16tUEM5bNDFwVvHgiBfiQX20WfZmZX8UMn4fVUdSxiN1zOfgaSrEQtCe S5cmQqKBfMGsa365n8aXm1dJsTTPk93McipUYnQmrro8p1Xi6dMyIVihua0IgVFZF14H UxRuNHfsfzdeA30UoEHl2e7RirnV+BSGsFXZoy4Mbsi1W8Hu3hNq0mWCe3BDB+lo5TgD sWZwjQWdu4kzk7QXirWBCtNKTtr6L5TKrSP8LaS7Om1Bqpz+Rp/YBlfMKW+/NxvyFu+S o3kBnc/zST1ODkSqqkFJxp7EDbfUNTX2B2FSmz7r2pEb+ltVABjKtDfTn9OrhjtoqEkL 7flw== 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=s8p3SXkS+ceJF2N5pVj3ZQwO1aA8OsQRAwhbeRSOY5hVf2Q364bepZGOFrqvb1Bbs/ +smO9MosWdjUiQ8KWnjTwUGHMcqKtK+AJ4ZrjmOjcAdpc3EkZEPKzlRL2mb9dFmCNff0 3hipcPgsjJ75ujwSw/VtOMbwrX287jCu0owU1+5BC22SIVs4pP4cwdEnrsnOfREf78ob kWpL2bCTz/Iw4bwuiRC/aoaXrnDhUwsCkwGn6dFE1gDPWGX/VapD+hKTpVdHMINLdlIt VTIUKLMALflnkt5n2Zg3s+yX8XC94WeTbTWNvXI3kFMGMZ5Z4NuLCjJ8BU8gvL/gMftw KPrA== X-Gm-Message-State: AKGB3mIDFAtvpw/U0VVnrIIWfQatFR17CQCuPaf1v8x/7m4kked0B59V eLX73PO/3oHneujhXOqdEGt71axy X-Google-Smtp-Source: ACJfBovv3x+DuXXGsDkz5EQduaWP0Ese7ugHLkjCXSWUJlPC1Tt1inucqk3ZYY4zWOwyptupT6K9SA== X-Received: by 10.84.172.195 with SMTP id n61mr13898690plb.321.1513360650562; Fri, 15 Dec 2017 09:57: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 u68sm13242329pfu.17.2017.12.15.09.57.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:57: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:56:50 +0800 Message-Id: <1513360611-11392-4-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513360611-11392-1-git-send-email-laoar.shao@gmail.com> References: <1513360611-11392-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:56: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: 849329 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="CEE598m2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyyng3WV7z9t34 for ; Sat, 16 Dec 2017 04:57:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756159AbdLOR5l (ORCPT ); Fri, 15 Dec 2017 12:57:41 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:38909 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755864AbdLOR5i (ORCPT ); Fri, 15 Dec 2017 12:57:38 -0500 Received: by mail-pg0-f67.google.com with SMTP id f12so6274106pgo.5; Fri, 15 Dec 2017 09:57:38 -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=CEE598m2kKOLtPltDrVDcaD2iCXlMO2P33d+X0m5EekEwsYA/JchCe1gdB011u+Rkw d/3T98r04q/sMsDrFuOzqmZNOpq1EgyfgvUhLlcTgnMM2YVG+kASpZrr+qZiLsMNB7IY 3irvvAZHAd3HFUza5pyp62lK7QqRgyj4b8yilGxcoWxasNHjV7Rxuimg4pR+HqvEvOyc 1Uj1L3Y0Pq/idy5PeN639tbxenAvEEjVysGbDgAdak1q7Siz/8PowSzuL2V+BVlU038p VWknD6JeVLqGrnlK40dBwHUYEwywi4KvxOvvLif2XH0i6w4W53AE894fkxw78iwjXZxz 6VLw== 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=qhOItA3VpgBnvybUL3UB2bXAUkmkaA40CpqBo1KNPNcJPKmchlKGVd6JULhF5gNxWv 0SrZUd+i59+7L8pYUqo4vXnUYF2/5bUXIV1bTdgBxpn1DD/qFJlMfWG8O08fGRv9adn5 z6YrHQTIkuJ4unmOJ4IL4wT2OnjgkklAer+XFMMvN05jm2PI0serJLKUlBW8bWHXIeZ9 o6ElC5RXjPVqmgxdf/hYiGyU4VHbX92oZ/1XuNvy2cheb1Us1GcbW7wedLWVI3NeGbnv wjDiZDCQROG1zDSzVkn8eeCy+a06QQkKNdVwN2s0SycEOHyujdL7WNRygmj/1lCrg/24 uHGA== X-Gm-Message-State: AKGB3mIOamT44oDqnGVqZaznq35lnLG9iuMVrSn9XKoVQR9bnmzaHnEu yHODeCqVb649/xcMjs6CV70= X-Google-Smtp-Source: ACJfBovoRS9C+6hhKIKB3zHUlRTEN1jf4lXH3X2Ghp8byy03ElpTdB8wFGFcAWUH7HbDi5fK6/o0rA== X-Received: by 10.101.101.12 with SMTP id x12mr12713001pgv.420.1513360657896; Fri, 15 Dec 2017 09:57:37 -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 u68sm13242329pfu.17.2017.12.15.09.57.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:57:37 -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:56:51 +0800 Message-Id: <1513360611-11392-5-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513360611-11392-1-git-send-email-laoar.shao@gmail.com> References: <1513360611-11392-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);