SUNRPC: Hoist trace_xprtrdma_op_setport into generic code
authorChuck Lever <chuck.lever@oracle.com>
Wed, 8 Jul 2020 20:10:24 +0000 (16:10 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 21 Sep 2020 14:21:09 +0000 (10:21 -0400)
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
include/trace/events/rpcrdma.h
include/trace/events/sunrpc.h
net/sunrpc/rpcb_clnt.c
net/sunrpc/xprtrdma/transport.c

index 1e17c2f..ad46bec 100644 (file)
@@ -423,7 +423,6 @@ DEFINE_CONN_EVENT(connect);
 DEFINE_CONN_EVENT(disconnect);
 
 DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
-DEFINE_RXPRT_EVENT(xprtrdma_op_setport);
 
 TRACE_EVENT(xprtrdma_op_connect,
        TP_PROTO(
index 6e5eba5..05291ce 100644 (file)
@@ -1305,6 +1305,35 @@ TRACE_EVENT(rpcb_getport,
        )
 );
 
+TRACE_EVENT(rpcb_setport,
+       TP_PROTO(
+               const struct rpc_task *task,
+               int status,
+               unsigned short port
+       ),
+
+       TP_ARGS(task, status, port),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, task_id)
+               __field(unsigned int, client_id)
+               __field(int, status)
+               __field(unsigned short, port)
+       ),
+
+       TP_fast_assign(
+               __entry->task_id = task->tk_pid;
+               __entry->client_id = task->tk_client->cl_clid;
+               __entry->status = status;
+               __entry->port = port;
+       ),
+
+       TP_printk("task:%u@%u status=%d port=%u",
+               __entry->task_id, __entry->client_id,
+               __entry->status, __entry->port
+       )
+);
+
 DECLARE_EVENT_CLASS(svc_xdr_buf_class,
        TP_PROTO(
                const struct svc_rqst *rqst,
index e306aab..cdf86c0 100644 (file)
@@ -801,34 +801,33 @@ static void rpcb_getport_done(struct rpc_task *child, void *data)
 {
        struct rpcbind_args *map = data;
        struct rpc_xprt *xprt = map->r_xprt;
-       int status = child->tk_status;
+
+       map->r_status = child->tk_status;
 
        /* Garbage reply: retry with a lesser rpcbind version */
-       if (status == -EIO)
-               status = -EPROTONOSUPPORT;
+       if (map->r_status == -EIO)
+               map->r_status = -EPROTONOSUPPORT;
 
        /* rpcbind server doesn't support this rpcbind protocol version */
-       if (status == -EPROTONOSUPPORT)
+       if (map->r_status == -EPROTONOSUPPORT)
                xprt->bind_index++;
 
-       if (status < 0) {
+       if (map->r_status < 0) {
                /* rpcbind server not available on remote host? */
-               xprt->ops->set_port(xprt, 0);
+               map->r_port = 0;
+
        } else if (map->r_port == 0) {
                /* Requested RPC service wasn't registered on remote host */
-               xprt->ops->set_port(xprt, 0);
-               status = -EACCES;
+               map->r_status = -EACCES;
        } else {
                /* Succeeded */
-               xprt->ops->set_port(xprt, map->r_port);
-               xprt_set_bound(xprt);
-               status = 0;
+               map->r_status = 0;
        }
 
-       dprintk("RPC: %5u rpcb_getport_done(status %d, port %u)\n",
-                       child->tk_pid, status, map->r_port);
-
-       map->r_status = status;
+       trace_rpcb_setport(child, map->r_status, map->r_port);
+       xprt->ops->set_port(xprt, map->r_port);
+       if (map->r_port)
+               xprt_set_bound(xprt);
 }
 
 /*
index 819a922..8915e42 100644 (file)
@@ -413,9 +413,6 @@ xprt_rdma_set_port(struct rpc_xprt *xprt, u16 port)
        kfree(xprt->address_strings[RPC_DISPLAY_HEX_PORT]);
        snprintf(buf, sizeof(buf), "%4hx", port);
        xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf, GFP_KERNEL);
-
-       trace_xprtrdma_op_setport(container_of(xprt, struct rpcrdma_xprt,
-                                              rx_xprt));
 }
 
 /**