]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
SUNRPC: Clean up call_bind_status() observability
authorChuck Lever <chuck.lever@oracle.com>
Wed, 8 Jul 2020 20:10:14 +0000 (16:10 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 21 Sep 2020 14:21:09 +0000 (10:21 -0400)
Time to remove dprintk call sites in here.

Regarding the rpc_bind_status tracepoint: It's friendlier to
administrators if they don't have to look up the error code to
figure out what went wrong. Replace trace_rpc_bind_status with a
set of tracepoints that report more specifically what the problem
was, and what RPC program/version was being queried.

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/clnt.c

index 3c5d707f7d54e5bb1d0263dd166a0c5106ff9636..353d9a18e2548f4dcff1b953d22268fdf8438670 100644 (file)
@@ -259,7 +259,6 @@ DECLARE_EVENT_CLASS(rpc_task_status,
                        TP_ARGS(task))
 
 DEFINE_RPC_STATUS_EVENT(call);
-DEFINE_RPC_STATUS_EVENT(bind);
 DEFINE_RPC_STATUS_EVENT(connect);
 DEFINE_RPC_STATUS_EVENT(timeout);
 DEFINE_RPC_STATUS_EVENT(retry_refresh);
@@ -520,6 +519,19 @@ DEFINE_RPC_REPLY_EVENT(stale_creds);
 DEFINE_RPC_REPLY_EVENT(bad_creds);
 DEFINE_RPC_REPLY_EVENT(auth_tooweak);
 
+#define DEFINE_RPCB_ERROR_EVENT(name)                                  \
+       DEFINE_EVENT(rpc_reply_event, rpcb_##name##_err,                \
+                       TP_PROTO(                                       \
+                               const struct rpc_task *task             \
+                       ),                                              \
+                       TP_ARGS(task))
+
+DEFINE_RPCB_ERROR_EVENT(prog_unavail);
+DEFINE_RPCB_ERROR_EVENT(timeout);
+DEFINE_RPCB_ERROR_EVENT(bind_version);
+DEFINE_RPCB_ERROR_EVENT(unreachable);
+DEFINE_RPCB_ERROR_EVENT(unrecognized);
+
 TRACE_EVENT(rpc_buf_alloc,
        TP_PROTO(
                const struct rpc_task *task,
index e13db512b164a84960cc17c796eac007f80199a6..3259120462ed718a14ebdc08f7ea4413fac4af2f 100644 (file)
@@ -1957,7 +1957,6 @@ call_bind_status(struct rpc_task *task)
                return;
        }
 
-       trace_rpc_bind_status(task);
        if (task->tk_status >= 0)
                goto out_next;
        if (xprt_bound(xprt)) {
@@ -1967,12 +1966,10 @@ call_bind_status(struct rpc_task *task)
 
        switch (task->tk_status) {
        case -ENOMEM:
-               dprintk("RPC: %5u rpcbind out of memory\n", task->tk_pid);
                rpc_delay(task, HZ >> 2);
                goto retry_timeout;
        case -EACCES:
-               dprintk("RPC: %5u remote rpcbind: RPC program/version "
-                               "unavailable\n", task->tk_pid);
+               trace_rpcb_prog_unavail_err(task);
                /* fail immediately if this is an RPC ping */
                if (task->tk_msg.rpc_proc->p_proc == 0) {
                        status = -EOPNOTSUPP;
@@ -1989,17 +1986,14 @@ call_bind_status(struct rpc_task *task)
        case -EAGAIN:
                goto retry_timeout;
        case -ETIMEDOUT:
-               dprintk("RPC: %5u rpcbind request timed out\n",
-                               task->tk_pid);
+               trace_rpcb_timeout_err(task);
                goto retry_timeout;
        case -EPFNOSUPPORT:
                /* server doesn't support any rpcbind version we know of */
-               dprintk("RPC: %5u unrecognized remote rpcbind service\n",
-                               task->tk_pid);
+               trace_rpcb_bind_version_err(task);
                break;
        case -EPROTONOSUPPORT:
-               dprintk("RPC: %5u remote rpcbind version unavailable, retrying\n",
-                               task->tk_pid);
+               trace_rpcb_bind_version_err(task);
                goto retry_timeout;
        case -ECONNREFUSED:             /* connection problems */
        case -ECONNRESET:
@@ -2010,8 +2004,7 @@ call_bind_status(struct rpc_task *task)
        case -EHOSTUNREACH:
        case -ENETUNREACH:
        case -EPIPE:
-               dprintk("RPC: %5u remote rpcbind unreachable: %d\n",
-                               task->tk_pid, task->tk_status);
+               trace_rpcb_unreachable_err(task);
                if (!RPC_IS_SOFTCONN(task)) {
                        rpc_delay(task, 5*HZ);
                        goto retry_timeout;
@@ -2019,8 +2012,7 @@ call_bind_status(struct rpc_task *task)
                status = task->tk_status;
                break;
        default:
-               dprintk("RPC: %5u unrecognized rpcbind error (%d)\n",
-                               task->tk_pid, -task->tk_status);
+               trace_rpcb_unrecognized_err(task);
        }
 
        rpc_call_rpcerror(task, status);