NFSv4: Add tracing for COMPOUND errors
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 1 Apr 2021 18:38:13 +0000 (14:38 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 14 Apr 2021 13:36:29 +0000 (09:36 -0400)
When the server returns a different operation than we expected, then
trace that.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/nfs4trace.h
fs/nfs/nfs4xdr.c

index 48d761e..3c505be 100644 (file)
@@ -666,6 +666,41 @@ TRACE_EVENT(nfs4_state_mgr_failed,
                )
 )
 
+TRACE_EVENT(nfs4_xdr_bad_operation,
+               TP_PROTO(
+                       const struct xdr_stream *xdr,
+                       u32 op,
+                       u32 expected
+               ),
+
+               TP_ARGS(xdr, op, expected),
+
+               TP_STRUCT__entry(
+                       __field(unsigned int, task_id)
+                       __field(unsigned int, client_id)
+                       __field(u32, xid)
+                       __field(u32, op)
+                       __field(u32, expected)
+               ),
+
+               TP_fast_assign(
+                       const struct rpc_rqst *rqstp = xdr->rqst;
+                       const struct rpc_task *task = rqstp->rq_task;
+
+                       __entry->task_id = task->tk_pid;
+                       __entry->client_id = task->tk_client->cl_clid;
+                       __entry->xid = be32_to_cpu(rqstp->rq_xid);
+                       __entry->op = op;
+                       __entry->expected = expected;
+               ),
+
+               TP_printk(
+                       "task:%u@%d xid=0x%08x operation=%u, expected=%u",
+                       __entry->task_id, __entry->client_id, __entry->xid,
+                       __entry->op, __entry->expected
+               )
+);
+
 TRACE_EVENT(nfs4_xdr_status,
                TP_PROTO(
                        const struct xdr_stream *xdr,
index edac471..ee7a7a1 100644 (file)
@@ -3210,9 +3210,7 @@ out_status:
        *nfs_retval = nfs4_stat_to_errno(nfserr);
        return true;
 out_bad_operation:
-       dprintk("nfs: Server returned operation"
-               " %d but we issued a request for %d\n",
-                       opnum, expected);
+       trace_nfs4_xdr_bad_operation(xdr, opnum, expected);
        *nfs_retval = -EREMOTEIO;
        return false;
 out_overflow: