Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[cascardo/linux.git] / net / sunrpc / rpcb_clnt.c
index cf5770d..5b30603 100644 (file)
@@ -648,10 +648,10 @@ static struct rpc_task *rpcb_call_async(struct rpc_clnt *rpcb_clnt, struct rpcbi
 static struct rpc_clnt *rpcb_find_transport_owner(struct rpc_clnt *clnt)
 {
        struct rpc_clnt *parent = clnt->cl_parent;
-       struct rpc_xprt *xprt = rcu_dereference(clnt->cl_xprt);
+       struct rpc_xprt_switch *xps = rcu_access_pointer(clnt->cl_xpi.xpi_xpswitch);
 
        while (parent != clnt) {
-               if (rcu_dereference(parent->cl_xprt) != xprt)
+               if (rcu_access_pointer(parent->cl_xpi.xpi_xpswitch) != xps)
                        break;
                if (clnt->cl_autobind)
                        break;
@@ -683,11 +683,9 @@ void rpcb_getport_async(struct rpc_task *task)
        int status;
 
        rcu_read_lock();
-       do {
-               clnt = rpcb_find_transport_owner(task->tk_client);
-               xprt = xprt_get(rcu_dereference(clnt->cl_xprt));
-       } while (xprt == NULL);
+       clnt = rpcb_find_transport_owner(task->tk_client);
        rcu_read_unlock();
+       xprt = xprt_get(task->tk_xprt);
 
        dprintk("RPC: %5u %s(%s, %u, %u, %d)\n",
                task->tk_pid, __func__,