]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
xprtrdma: Trace marshaling failures
authorChuck Lever <chuck.lever@oracle.com>
Wed, 24 Apr 2019 13:39:48 +0000 (09:39 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 25 Apr 2019 19:19:56 +0000 (15:19 -0400)
Record an event when rpcrdma_marshal_req returns a non-zero return
value to help track down why an xprt close might have occurred.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
include/trace/events/rpcrdma.h
net/sunrpc/xprtrdma/rpc_rdma.c

index 962975b4313fa58c0e3d54c3232a7d3d88a2a4b7..df9851cb82b2c61d743f32fdd63a90b99b82d286 100644 (file)
@@ -511,6 +511,33 @@ TRACE_EVENT(xprtrdma_marshal,
        )
 );
 
+TRACE_EVENT(xprtrdma_marshal_failed,
+       TP_PROTO(const struct rpc_rqst *rqst,
+                int ret
+       ),
+
+       TP_ARGS(rqst, ret),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, task_id)
+               __field(unsigned int, client_id)
+               __field(u32, xid)
+               __field(int, ret)
+       ),
+
+       TP_fast_assign(
+               __entry->task_id = rqst->rq_task->tk_pid;
+               __entry->client_id = rqst->rq_task->tk_client->cl_clid;
+               __entry->xid = be32_to_cpu(rqst->rq_xid);
+               __entry->ret = ret;
+       ),
+
+       TP_printk("task:%u@%u xid=0x%08x: ret=%d",
+               __entry->task_id, __entry->client_id, __entry->xid,
+               __entry->ret
+       )
+);
+
 TRACE_EVENT(xprtrdma_post_send,
        TP_PROTO(
                const struct rpcrdma_req *req,
index 231a44b9c15288796a77c588171e7078e6f69ab9..45cba06655ea903cd224d22c79ef4f02863c82e5 100644 (file)
@@ -875,6 +875,7 @@ rpcrdma_marshal_req(struct rpcrdma_xprt *r_xprt, struct rpc_rqst *rqst)
        return 0;
 
 out_err:
+       trace_xprtrdma_marshal_failed(rqst, ret);
        switch (ret) {
        case -EAGAIN:
                xprt_wait_for_buffer_space(rqst->rq_xprt);