SUNRPC: Fix sockaddr handling in svcsock_accept_class trace points
authorChuck Lever <chuck.lever@oracle.com>
Sat, 8 Jan 2022 21:59:54 +0000 (16:59 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 10 Jan 2022 15:57:34 +0000 (10:57 -0500)
Avoid potentially hazardous memory copying and the needless use of
"%pIS" -- in the kernel, an RPC service listener is always bound to
ANYADDR. Having the network namespace is helpful when recording
errors, though.

Fixes: a0469f46faab ("SUNRPC: Replace dprintk call sites in TCP state change callouts")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
include/trace/events/sunrpc.h

index 1c0a288..1e566ac 100644 (file)
@@ -2125,17 +2125,17 @@ DECLARE_EVENT_CLASS(svcsock_accept_class,
        TP_STRUCT__entry(
                __field(long, status)
                __string(service, service)
-               __array(unsigned char, addr, sizeof(struct sockaddr_in6))
+               __field(unsigned int, netns_ino)
        ),
 
        TP_fast_assign(
                __entry->status = status;
                __assign_str(service, service);
-               memcpy(__entry->addr, &xprt->xpt_local, sizeof(__entry->addr));
+               __entry->netns_ino = xprt->xpt_net->ns.inum;
        ),
 
-       TP_printk("listener=%pISpc service=%s status=%ld",
-               __entry->addr, __get_str(service), __entry->status
+       TP_printk("addr=listener service=%s status=%ld",
+               __get_str(service), __entry->status
        )
 );