NFSD: Trace NFSv4 COMPOUND tags
authorChuck Lever <chuck.lever@oracle.com>
Thu, 8 Sep 2022 22:13:48 +0000 (18:13 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 26 Sep 2022 18:02:31 +0000 (14:02 -0400)
The Linux NFSv4 client implementation does not use COMPOUND tags,
but the Solaris and MacOS implementations do, and so does pynfs.
Record these eye-catchers in the server's trace buffer to annotate
client requests while troubleshooting.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
fs/nfsd/nfs4proc.c
fs/nfsd/trace.h

index 6ef0795fefb450d3a2c60b089220f66bd5d7c509..f14b015022ed575f4a08f0b29902fd0429970120 100644 (file)
@@ -2643,7 +2643,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)
 
        rqstp->rq_lease_breaker = (void **)&cstate->clp;
 
-       trace_nfsd_compound(rqstp, args->client_opcnt);
+       trace_nfsd_compound(rqstp, args->tag, args->taglen, args->client_opcnt);
        while (!status && resp->opcnt < args->opcnt) {
                op = &args->ops[resp->opcnt++];
 
index 1b9f5753f33656d9c7b9a74a51d4d4f441665d62..0c35a1a844e6c5017fc44d538ee971edd634d5bc 100644 (file)
@@ -84,19 +84,26 @@ DEFINE_NFSD_XDR_ERR_EVENT(cant_encode);
                { NFSD_MAY_64BIT_COOKIE,        "64BIT_COOKIE" })
 
 TRACE_EVENT(nfsd_compound,
-       TP_PROTO(const struct svc_rqst *rqst,
-                u32 args_opcnt),
-       TP_ARGS(rqst, args_opcnt),
+       TP_PROTO(
+               const struct svc_rqst *rqst,
+               const char *tag,
+               u32 taglen,
+               u32 opcnt
+       ),
+       TP_ARGS(rqst, tag, taglen, opcnt),
        TP_STRUCT__entry(
                __field(u32, xid)
-               __field(u32, args_opcnt)
+               __field(u32, opcnt)
+               __string_len(tag, tag, taglen)
        ),
        TP_fast_assign(
                __entry->xid = be32_to_cpu(rqst->rq_xid);
-               __entry->args_opcnt = args_opcnt;
+               __entry->opcnt = opcnt;
+               __assign_str_len(tag, tag, taglen);
        ),
-       TP_printk("xid=0x%08x opcnt=%u",
-               __entry->xid, __entry->args_opcnt)
+       TP_printk("xid=0x%08x opcnt=%u tag=%s",
+               __entry->xid, __entry->opcnt, __get_str(tag)
+       )
 )
 
 TRACE_EVENT(nfsd_compound_status,