SUNRPC: Trace the rpc_create_args
authorChuck Lever <chuck.lever@oracle.com>
Wed, 7 Jun 2023 13:57:37 +0000 (09:57 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 19 Jun 2023 16:17:56 +0000 (12:17 -0400)
Pass the upper layer's rpc_create_args to the rpc_clnt_new()
tracepoint so additional parts of the upper layer's request can be
recorded.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
include/trace/events/sunrpc.h
net/sunrpc/clnt.c

index 31bc7025cb44796c19b38c07c0691c4e6bdfb133..34784f29a63de96bc58771a4a49575d4f0d9ee20 100644 (file)
@@ -139,36 +139,68 @@ DEFINE_RPC_CLNT_EVENT(release);
 DEFINE_RPC_CLNT_EVENT(replace_xprt);
 DEFINE_RPC_CLNT_EVENT(replace_xprt_err);
 
+TRACE_DEFINE_ENUM(RPC_XPRTSEC_NONE);
+TRACE_DEFINE_ENUM(RPC_XPRTSEC_TLS_X509);
+
+#define rpc_show_xprtsec_policy(policy)                                        \
+       __print_symbolic(policy,                                        \
+               { RPC_XPRTSEC_NONE,             "none" },               \
+               { RPC_XPRTSEC_TLS_ANON,         "tls-anon" },           \
+               { RPC_XPRTSEC_TLS_X509,         "tls-x509" })
+
+#define rpc_show_create_flags(flags)                                   \
+       __print_flags(flags, "|",                                       \
+               { RPC_CLNT_CREATE_HARDRTRY,     "HARDRTRY" },           \
+               { RPC_CLNT_CREATE_AUTOBIND,     "AUTOBIND" },           \
+               { RPC_CLNT_CREATE_NONPRIVPORT,  "NONPRIVPORT" },        \
+               { RPC_CLNT_CREATE_NOPING,       "NOPING" },             \
+               { RPC_CLNT_CREATE_DISCRTRY,     "DISCRTRY" },           \
+               { RPC_CLNT_CREATE_QUIET,        "QUIET" },              \
+               { RPC_CLNT_CREATE_INFINITE_SLOTS,                       \
+                                               "INFINITE_SLOTS" },     \
+               { RPC_CLNT_CREATE_NO_IDLE_TIMEOUT,                      \
+                                               "NO_IDLE_TIMEOUT" },    \
+               { RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT,                   \
+                                               "NO_RETRANS_TIMEOUT" }, \
+               { RPC_CLNT_CREATE_SOFTERR,      "SOFTERR" },            \
+               { RPC_CLNT_CREATE_REUSEPORT,    "REUSEPORT" })
+
 TRACE_EVENT(rpc_clnt_new,
        TP_PROTO(
                const struct rpc_clnt *clnt,
                const struct rpc_xprt *xprt,
-               const char *program,
-               const char *server
+               const struct rpc_create_args *args
        ),
 
-       TP_ARGS(clnt, xprt, program, server),
+       TP_ARGS(clnt, xprt, args),
 
        TP_STRUCT__entry(
                __field(unsigned int, client_id)
+               __field(unsigned long, xprtsec)
+               __field(unsigned long, flags)
+               __string(program, clnt->cl_program->name)
+               __string(server, xprt->servername)
                __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
                __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
-               __string(program, program)
-               __string(server, server)
        ),
 
        TP_fast_assign(
                __entry->client_id = clnt->cl_clid;
+               __entry->xprtsec = args->xprtsec.policy;
+               __entry->flags = args->flags;
+               __assign_str(program, clnt->cl_program->name);
+               __assign_str(server, xprt->servername);
                __assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
                __assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
-               __assign_str(program, program);
-               __assign_str(server, server);
        ),
 
-       TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER
-                 " peer=[%s]:%s program=%s server=%s",
+       TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER " peer=[%s]:%s"
+               " program=%s server=%s xprtsec=%s flags=%s",
                __entry->client_id, __get_str(addr), __get_str(port),
-               __get_str(program), __get_str(server))
+               __get_str(program), __get_str(server),
+               rpc_show_xprtsec_policy(__entry->xprtsec),
+               rpc_show_create_flags(__entry->flags)
+       )
 );
 
 TRACE_EVENT(rpc_clnt_new_err,
index 8364b74a0f81645c9316720e29e5e77d29b350ee..ba34cfcf459a2354b685bdcaca5b1641216e370f 100644 (file)
@@ -435,7 +435,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
        if (parent)
                refcount_inc(&parent->cl_count);
 
-       trace_rpc_clnt_new(clnt, xprt, program->name, args->servername);
+       trace_rpc_clnt_new(clnt, xprt, args);
        return clnt;
 
 out_no_path: