> On Jul 22, 2022, at 1:59 PM, Trond Myklebust <trondmy@xxxxxxxxxxxxxxx> wrote: > > On Fri, 2022-07-22 at 13:25 -0400, Chuck Lever wrote: >> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> >> --- >> include/trace/events/sunrpc.h | 18 ++++++++++++++++++ >> net/sunrpc/xprtsock.c | 6 ++++-- >> 2 files changed, 22 insertions(+), 2 deletions(-) >> >> diff --git a/include/trace/events/sunrpc.h >> b/include/trace/events/sunrpc.h >> index b61d9c90fa26..04b6903b6c0c 100644 >> --- a/include/trace/events/sunrpc.h >> +++ b/include/trace/events/sunrpc.h >> @@ -1266,6 +1266,24 @@ TRACE_EVENT(xprt_reserve, >> ) >> ); >> >> +TRACE_EVENT(xs_data_ready, >> + TP_PROTO( >> + const struct rpc_xprt *xprt >> + ), >> + >> + TP_ARGS(xprt), >> + >> + TP_STRUCT__entry( >> + __sockaddr(addr, xprt->addrlen) >> + ), >> + >> + TP_fast_assign( >> + __assign_sockaddr(addr, &xprt->addr, xprt->addrlen); >> + ), >> + >> + TP_printk("peer=%pISpc", __get_sockaddr(addr)) > > NACK. Please resolve and store the string up front instead of storing > the sockaddr. Most versions of perf can't resolve those kernel-specific > %p printks and just end up barfing on them. Interesting. We added get_sockaddr() to avoid this issue in trace-cmd. Sounds like perf needs to be fixed up too, or maybe this is another case of having an old libtraceevent? Meanwhile, I can revert this back to the old way of handling presentation addresses. >> +); >> + >> TRACE_EVENT(xs_stream_read_data, >> TP_PROTO(struct rpc_xprt *xprt, ssize_t err, size_t total), >> >> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c >> index fcdd0fca408e..eba1be9984f8 100644 >> --- a/net/sunrpc/xprtsock.c >> +++ b/net/sunrpc/xprtsock.c >> @@ -1378,7 +1378,7 @@ static void xs_udp_data_receive_workfn(struct >> work_struct *work) >> } >> >> /** >> - * xs_data_ready - "data ready" callback for UDP sockets >> + * xs_data_ready - "data ready" callback for sockets >> * @sk: socket with data to read >> * >> */ >> @@ -1386,11 +1386,13 @@ static void xs_data_ready(struct sock *sk) >> { >> struct rpc_xprt *xprt; >> >> - dprintk("RPC: xs_data_ready...\n"); >> xprt = xprt_from_sock(sk); >> if (xprt != NULL) { >> struct sock_xprt *transport = container_of(xprt, >> struct sock_xprt, xprt); >> + >> + trace_xs_data_ready(xprt); >> + >> transport->old_data_ready(sk); >> /* Any data means we had a useful conversation, so >> * then we don't need to delay the next reconnect >> >> > > -- > Trond Myklebust > Linux NFS client maintainer, Hammerspace > trond.myklebust@xxxxxxxxxxxxxxx -- Chuck Lever