SUNRPC: Create a helper to tell whether a transport is bound
Hide the contents and format of xprt->addr by eliminating direct uses of the xprt->addr.sin_port field. This change is required to support alternate RPC host address formats (eg IPv6). Test-plan: Destructive testing (unplugging the network temporarily). Repeated runs of Connectathon locking suite with UDP and TCP. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
9c5bf38d85
commit
ec739ef03d
@@ -148,7 +148,6 @@ rpc_new_client(struct rpc_xprt *xprt, char *servname,
|
||||
clnt->cl_maxproc = version->nrprocs;
|
||||
clnt->cl_protname = program->name;
|
||||
clnt->cl_pmap = &clnt->cl_pmap_default;
|
||||
clnt->cl_port = xprt->addr.sin_port;
|
||||
clnt->cl_prog = program->number;
|
||||
clnt->cl_vers = version->number;
|
||||
clnt->cl_prot = xprt->prot;
|
||||
@@ -156,7 +155,7 @@ rpc_new_client(struct rpc_xprt *xprt, char *servname,
|
||||
clnt->cl_metrics = rpc_alloc_iostats(clnt);
|
||||
rpc_init_wait_queue(&clnt->cl_pmap_default.pm_bindwait, "bindwait");
|
||||
|
||||
if (!clnt->cl_port)
|
||||
if (!xprt_bound(clnt->cl_xprt))
|
||||
clnt->cl_autobind = 1;
|
||||
|
||||
clnt->cl_rtt = &clnt->cl_rtt_default;
|
||||
@@ -570,7 +569,7 @@ EXPORT_SYMBOL(rpc_max_payload);
|
||||
void rpc_force_rebind(struct rpc_clnt *clnt)
|
||||
{
|
||||
if (clnt->cl_autobind)
|
||||
clnt->cl_port = 0;
|
||||
xprt_clear_bound(clnt->cl_xprt);
|
||||
}
|
||||
EXPORT_SYMBOL(rpc_force_rebind);
|
||||
|
||||
@@ -782,14 +781,15 @@ static void
|
||||
call_bind(struct rpc_task *task)
|
||||
{
|
||||
struct rpc_clnt *clnt = task->tk_client;
|
||||
struct rpc_xprt *xprt = task->tk_xprt;
|
||||
|
||||
dprintk("RPC: %4d call_bind (status %d)\n",
|
||||
task->tk_pid, task->tk_status);
|
||||
|
||||
task->tk_action = call_connect;
|
||||
if (!clnt->cl_port) {
|
||||
if (!xprt_bound(xprt)) {
|
||||
task->tk_action = call_bind_status;
|
||||
task->tk_timeout = task->tk_xprt->bind_timeout;
|
||||
task->tk_timeout = xprt->bind_timeout;
|
||||
rpc_getport(task, clnt);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user