svcrdma: Record Receive completion ID in svc_rdma_decode_rqst
authorChuck Lever <chuck.lever@oracle.com>
Wed, 29 Apr 2020 21:16:31 +0000 (17:16 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 13 Jul 2020 21:28:24 +0000 (17:28 -0400)
When recording a trace event in the Receive path, tie decoding
results and errors to an incoming Receive completion.

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

index a0330a557e34ab77d4c249f80acad6b0ff4567fa..df49ae5d447bf23c5a160d485f0f5f3a41c374cf 100644 (file)
@@ -1369,13 +1369,16 @@ TRACE_DEFINE_ENUM(RDMA_ERROR);
 
 TRACE_EVENT(svcrdma_decode_rqst,
        TP_PROTO(
+               const struct svc_rdma_recv_ctxt *ctxt,
                __be32 *p,
                unsigned int hdrlen
        ),
 
-       TP_ARGS(p, hdrlen),
+       TP_ARGS(ctxt, p, hdrlen),
 
        TP_STRUCT__entry(
+               __field(u32, cq_id)
+               __field(int, completion_id)
                __field(u32, xid)
                __field(u32, vers)
                __field(u32, proc)
@@ -1384,6 +1387,8 @@ TRACE_EVENT(svcrdma_decode_rqst,
        ),
 
        TP_fast_assign(
+               __entry->cq_id = ctxt->rc_cid.ci_queue_id;
+               __entry->completion_id = ctxt->rc_cid.ci_completion_id;
                __entry->xid = be32_to_cpup(p++);
                __entry->vers = be32_to_cpup(p++);
                __entry->credits = be32_to_cpup(p++);
@@ -1391,37 +1396,48 @@ TRACE_EVENT(svcrdma_decode_rqst,
                __entry->hdrlen = hdrlen;
        ),
 
-       TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
+       TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
+               __entry->cq_id, __entry->completion_id,
                __entry->xid, __entry->vers, __entry->credits,
                show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
 );
 
 TRACE_EVENT(svcrdma_decode_short_err,
        TP_PROTO(
+               const struct svc_rdma_recv_ctxt *ctxt,
                unsigned int hdrlen
        ),
 
-       TP_ARGS(hdrlen),
+       TP_ARGS(ctxt, hdrlen),
 
        TP_STRUCT__entry(
+               __field(u32, cq_id)
+               __field(int, completion_id)
                __field(unsigned int, hdrlen)
        ),
 
        TP_fast_assign(
+               __entry->cq_id = ctxt->rc_cid.ci_queue_id;
+               __entry->completion_id = ctxt->rc_cid.ci_completion_id;
                __entry->hdrlen = hdrlen;
        ),
 
-       TP_printk("hdrlen=%u", __entry->hdrlen)
+       TP_printk("cq.id=%u cid=%d hdrlen=%u",
+               __entry->cq_id, __entry->completion_id,
+               __entry->hdrlen)
 );
 
 DECLARE_EVENT_CLASS(svcrdma_badreq_event,
        TP_PROTO(
+               const struct svc_rdma_recv_ctxt *ctxt,
                __be32 *p
        ),
 
-       TP_ARGS(p),
+       TP_ARGS(ctxt, p),
 
        TP_STRUCT__entry(
+               __field(u32, cq_id)
+               __field(int, completion_id)
                __field(u32, xid)
                __field(u32, vers)
                __field(u32, proc)
@@ -1429,13 +1445,16 @@ DECLARE_EVENT_CLASS(svcrdma_badreq_event,
        ),
 
        TP_fast_assign(
+               __entry->cq_id = ctxt->rc_cid.ci_queue_id;
+               __entry->completion_id = ctxt->rc_cid.ci_completion_id;
                __entry->xid = be32_to_cpup(p++);
                __entry->vers = be32_to_cpup(p++);
                __entry->credits = be32_to_cpup(p++);
                __entry->proc = be32_to_cpup(p);
        ),
 
-       TP_printk("xid=0x%08x vers=%u credits=%u proc=%u",
+       TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
+               __entry->cq_id, __entry->completion_id,
                __entry->xid, __entry->vers, __entry->credits, __entry->proc)
 );
 
@@ -1443,9 +1462,10 @@ DECLARE_EVENT_CLASS(svcrdma_badreq_event,
                DEFINE_EVENT(svcrdma_badreq_event,                      \
                             svcrdma_decode_##name##_err,               \
                                TP_PROTO(                               \
+                                       const struct svc_rdma_recv_ctxt *ctxt,  \
                                        __be32 *p                       \
                                ),                                      \
-                               TP_ARGS(p))
+                               TP_ARGS(ctxt, p))
 
 DEFINE_BADREQ_EVENT(badvers);
 DEFINE_BADREQ_EVENT(drop);
index e6d7401232d2f0437607bbec1b8afda5a51b9f58..d5ec85cb652ce1600e27d2f0fa9e6ac5766e51df 100644 (file)
@@ -667,27 +667,27 @@ static int svc_rdma_xdr_decode_req(struct xdr_buf *rq_arg,
        hdr_len = xdr_stream_pos(&rctxt->rc_stream);
        rq_arg->head[0].iov_len -= hdr_len;
        rq_arg->len -= hdr_len;
-       trace_svcrdma_decode_rqst(rdma_argp, hdr_len);
+       trace_svcrdma_decode_rqst(rctxt, rdma_argp, hdr_len);
        return hdr_len;
 
 out_short:
-       trace_svcrdma_decode_short_err(rq_arg->len);
+       trace_svcrdma_decode_short_err(rctxt, rq_arg->len);
        return -EINVAL;
 
 out_version:
-       trace_svcrdma_decode_badvers_err(rdma_argp);
+       trace_svcrdma_decode_badvers_err(rctxt, rdma_argp);
        return -EPROTONOSUPPORT;
 
 out_drop:
-       trace_svcrdma_decode_drop_err(rdma_argp);
+       trace_svcrdma_decode_drop_err(rctxt, rdma_argp);
        return 0;
 
 out_proc:
-       trace_svcrdma_decode_badproc_err(rdma_argp);
+       trace_svcrdma_decode_badproc_err(rctxt, rdma_argp);
        return -EINVAL;
 
 out_inval:
-       trace_svcrdma_decode_parse_err(rdma_argp);
+       trace_svcrdma_decode_parse_err(rctxt, rdma_argp);
        return -EINVAL;
 }