svcrdma: Trace page overruns when constructing RDMA Reads
authorChuck Lever <chuck.lever@oracle.com>
Fri, 20 Mar 2020 18:33:05 +0000 (14:33 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 18 May 2020 14:21:21 +0000 (10:21 -0400)
Clean up: Replace a dprintk call site with a tracepoint.

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

index aca9d0f..d6da6b8 100644 (file)
@@ -1637,6 +1637,34 @@ TRACE_EVENT(svcrdma_no_rwctx_err,
        )
 );
 
+TRACE_EVENT(svcrdma_page_overrun_err,
+       TP_PROTO(
+               const struct svcxprt_rdma *rdma,
+               const struct svc_rqst *rqst,
+               unsigned int pageno
+       ),
+
+       TP_ARGS(rdma, rqst, pageno),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, pageno)
+               __field(u32, xid)
+               __string(device, rdma->sc_cm_id->device->name)
+               __string(addr, rdma->sc_xprt.xpt_remotebuf)
+       ),
+
+       TP_fast_assign(
+               __entry->pageno = pageno;
+               __entry->xid = __be32_to_cpu(rqst->rq_xid);
+               __assign_str(device, rdma->sc_cm_id->device->name);
+               __assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
+       ),
+
+       TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
+               __get_str(device), __entry->xid, __entry->pageno
+       )
+);
+
 TRACE_EVENT(svcrdma_send_pullup,
        TP_PROTO(
                unsigned int len
index c2d49f6..17098a1 100644 (file)
@@ -676,7 +676,7 @@ static int svc_rdma_build_read_segment(struct svc_rdma_read_info *info,
        return 0;
 
 out_overrun:
-       dprintk("svcrdma: request overruns rq_pages\n");
+       trace_svcrdma_page_overrun_err(cc->cc_rdma, rqstp, info->ri_pageno);
        return -EINVAL;
 }