SUNRPC: Replace dprintk() call site in xs_nospace()
authorChuck Lever <chuck.lever@oracle.com>
Wed, 8 Jul 2020 20:09:32 +0000 (16:09 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 21 Sep 2020 14:21:08 +0000 (10:21 -0400)
"no socket space" is an exceptional and infrequent condition
that troubleshooters want to know about.

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

index 9746a72..90d7b99 100644 (file)
@@ -898,6 +898,34 @@ DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
 DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
 DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
 
+TRACE_EVENT(rpc_socket_nospace,
+       TP_PROTO(
+               const struct rpc_rqst *rqst,
+               const struct sock_xprt *transport
+       ),
+
+       TP_ARGS(rqst, transport),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, task_id)
+               __field(unsigned int, client_id)
+               __field(unsigned int, total)
+               __field(unsigned int, remaining)
+       ),
+
+       TP_fast_assign(
+               __entry->task_id = rqst->rq_task->tk_pid;
+               __entry->client_id = rqst->rq_task->tk_client->cl_clid;
+               __entry->total = rqst->rq_slen;
+               __entry->remaining = rqst->rq_slen - transport->xmit.offset;
+       ),
+
+       TP_printk("task:%u@%u total=%u remaining=%u",
+               __entry->task_id, __entry->client_id,
+               __entry->total, __entry->remaining
+       )
+);
+
 TRACE_DEFINE_ENUM(XPRT_LOCKED);
 TRACE_DEFINE_ENUM(XPRT_CONNECTED);
 TRACE_DEFINE_ENUM(XPRT_CONNECTING);
index 554e1bb..7090bbe 100644 (file)
@@ -762,10 +762,7 @@ static int xs_nospace(struct rpc_rqst *req)
        struct sock *sk = transport->inet;
        int ret = -EAGAIN;
 
-       dprintk("RPC: %5u xmit incomplete (%u left of %u)\n",
-                       req->rq_task->tk_pid,
-                       req->rq_slen - transport->xmit.offset,
-                       req->rq_slen);
+       trace_rpc_socket_nospace(req, transport);
 
        /* Protect against races with write_space */
        spin_lock(&xprt->transport_lock);