Commit ac1ae534 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker
Browse files

SUNRPC: Hoist trace_xprtrdma_op_setport into generic code

parent e465cc3f
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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(
+29 −0
Original line number Diff line number Diff line
@@ -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,
+14 −15
Original line number Diff line number Diff line
@@ -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);
}

/*
+0 −3
Original line number Diff line number Diff line
@@ -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));
}

/**