Message ID | 165452706752.1496.657240546600966342.stgit@oracle-102.nfsv4.dev (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | RPC-with-TLS client side | expand |
On Mon, 2022-06-06 at 10:51 -0400, Chuck Lever wrote: > 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> > --- > include/trace/events/sunrpc.h | 53 +++++++++++++++++++++++++++++++++-------- > net/sunrpc/clnt.c | 2 +- > 2 files changed, 44 insertions(+), 11 deletions(-) > > diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h > index a66aa1f59ed8..986e135e314f 100644 > --- a/include/trace/events/sunrpc.h > +++ b/include/trace/events/sunrpc.h > @@ -139,36 +139,69 @@ 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); > +TRACE_DEFINE_ENUM(RPC_XPRTSEC_TLS_PSK); > + > +#define rpc_show_xprtsec_policy(policy) \ > + __print_symbolic(policy, \ > + { RPC_XPRTSEC_NONE, "none" }, \ > + { RPC_XPRTSEC_TLS_X509, "tls-x509" }, \ > + { RPC_XPRTSEC_TLS_PSK, "tls-psk" }) > + > +#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; > + __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, > diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c > index 6dcc88d45f5d..0ca86c92968f 100644 > --- a/net/sunrpc/clnt.c > +++ b/net/sunrpc/clnt.c > @@ -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: > > All of these tracing patches seem like a reasonable thing to add on their own, IMO. It might be good to move them and some of the bugfixes to a separate series and get those merged ahead of the parts that add TLS support (which are more controversial). Reviewed-by: Jeff Layton <jlayton@kernel.org>
> On Jul 6, 2022, at 2:57 PM, Jeff Layton <jlayton@kernel.org> wrote: > > All of these tracing patches seem like a reasonable thing to add on > their own, IMO. It might be good to move them and some of the bugfixes > to a separate series and get those merged ahead of the parts that add > TLS support (which are more controversial). Well, that's why I moved those to the front of this series. In the past, Trond hasn't been shy about extracting patches from series to apply sooner rather than later. But, yes, if Anna and Trond say they'd like a separate series for this, I'm happy to oblige. -- Chuck Lever
diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h index a66aa1f59ed8..986e135e314f 100644 --- a/include/trace/events/sunrpc.h +++ b/include/trace/events/sunrpc.h @@ -139,36 +139,69 @@ 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); +TRACE_DEFINE_ENUM(RPC_XPRTSEC_TLS_PSK); + +#define rpc_show_xprtsec_policy(policy) \ + __print_symbolic(policy, \ + { RPC_XPRTSEC_NONE, "none" }, \ + { RPC_XPRTSEC_TLS_X509, "tls-x509" }, \ + { RPC_XPRTSEC_TLS_PSK, "tls-psk" }) + +#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; + __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, diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 6dcc88d45f5d..0ca86c92968f 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -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:
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> --- include/trace/events/sunrpc.h | 53 +++++++++++++++++++++++++++++++++-------- net/sunrpc/clnt.c | 2 +- 2 files changed, 44 insertions(+), 11 deletions(-)