SUNRPC: Use "sockaddr_storage" for storing RPC client's remote peer address
[GitHub/moto-9609/android_kernel_motorola_exynos9610.git] / net / sunrpc / xprt.c
index e8c2bc4977f3a41dbfbd6c3a85a4c15b6a14e6eb..4987517cc74bb9a10668bc92442c0e88d969d969 100644 (file)
@@ -534,7 +534,7 @@ void xprt_connect(struct rpc_task *task)
        dprintk("RPC: %4d xprt_connect xprt %p %s connected\n", task->tk_pid,
                        xprt, (xprt_connected(xprt) ? "is" : "is not"));
 
-       if (!xprt->addr.sin_port) {
+       if (!xprt_bound(xprt)) {
                task->tk_status = -EIO;
                return;
        }
@@ -896,7 +896,8 @@ static struct rpc_xprt *xprt_setup(int proto, struct sockaddr_in *ap, struct rpc
        if ((xprt = kzalloc(sizeof(struct rpc_xprt), GFP_KERNEL)) == NULL)
                return ERR_PTR(-ENOMEM);
 
-       xprt->addr = *ap;
+       memcpy(&xprt->addr, ap, sizeof(*ap));
+       xprt->addrlen = sizeof(*ap);
 
        switch (proto) {
        case IPPROTO_UDP:
@@ -928,6 +929,7 @@ static struct rpc_xprt *xprt_setup(int proto, struct sockaddr_in *ap, struct rpc
        xprt->last_used = jiffies;
        xprt->cwnd = RPC_INITCWND;
 
+       rpc_init_wait_queue(&xprt->binding, "xprt_binding");
        rpc_init_wait_queue(&xprt->pending, "xprt_pending");
        rpc_init_wait_queue(&xprt->sending, "xprt_sending");
        rpc_init_wait_queue(&xprt->resend, "xprt_resend");