Merge tag 'nfsd-4.17' of git://linux-nfs.org/~bfields/linux
[muen/linux.git] / net / sunrpc / svcsock.c
index 4ca1d92b531ace1dd3482bad515eca5c543174e6..5445145e639c9c82f8cc53f80b327da9260b0658 100644 (file)
@@ -835,12 +835,13 @@ static struct svc_xprt *svc_tcp_accept(struct svc_xprt *xprt)
        }
        set_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags);
 
        }
        set_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags);
 
-       err = kernel_getpeername(newsock, sin, &slen);
+       err = kernel_getpeername(newsock, sin);
        if (err < 0) {
                net_warn_ratelimited("%s: peername failed (err %d)!\n",
                                     serv->sv_name, -err);
                goto failed;            /* aborted connection or whatever */
        }
        if (err < 0) {
                net_warn_ratelimited("%s: peername failed (err %d)!\n",
                                     serv->sv_name, -err);
                goto failed;            /* aborted connection or whatever */
        }
+       slen = err;
 
        /* Ideally, we would want to reject connections from unauthorized
         * hosts here, but when we get encryption, the IP of the host won't
 
        /* Ideally, we would want to reject connections from unauthorized
         * hosts here, but when we get encryption, the IP of the host won't
@@ -869,7 +870,8 @@ static struct svc_xprt *svc_tcp_accept(struct svc_xprt *xprt)
        if (IS_ERR(newsvsk))
                goto failed;
        svc_xprt_set_remote(&newsvsk->sk_xprt, sin, slen);
        if (IS_ERR(newsvsk))
                goto failed;
        svc_xprt_set_remote(&newsvsk->sk_xprt, sin, slen);
-       err = kernel_getsockname(newsock, sin, &slen);
+       err = kernel_getsockname(newsock, sin);
+       slen = err;
        if (unlikely(err < 0)) {
                dprintk("svc_tcp_accept: kernel_getsockname error %d\n", -err);
                slen = offsetof(struct sockaddr, sa_data);
        if (unlikely(err < 0)) {
                dprintk("svc_tcp_accept: kernel_getsockname error %d\n", -err);
                slen = offsetof(struct sockaddr, sa_data);
@@ -1469,7 +1471,8 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return,
                err = PTR_ERR(svsk);
                goto out;
        }
                err = PTR_ERR(svsk);
                goto out;
        }
-       if (kernel_getsockname(svsk->sk_sock, sin, &salen) == 0)
+       salen = kernel_getsockname(svsk->sk_sock, sin);
+       if (salen >= 0)
                svc_xprt_set_local(&svsk->sk_xprt, sin, salen);
        svc_add_new_perm_xprt(serv, &svsk->sk_xprt);
        return svc_one_sock_name(svsk, name_return, len);
                svc_xprt_set_local(&svsk->sk_xprt, sin, salen);
        svc_add_new_perm_xprt(serv, &svsk->sk_xprt);
        return svc_one_sock_name(svsk, name_return, len);
@@ -1543,10 +1546,10 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
        if (error < 0)
                goto bummer;
 
        if (error < 0)
                goto bummer;
 
-       newlen = len;
-       error = kernel_getsockname(sock, newsin, &newlen);
+       error = kernel_getsockname(sock, newsin);
        if (error < 0)
                goto bummer;
        if (error < 0)
                goto bummer;
+       newlen = error;
 
        if (protocol == IPPROTO_TCP) {
                if ((error = kernel_listen(sock, 64)) < 0)
 
        if (protocol == IPPROTO_TCP) {
                if ((error = kernel_listen(sock, 64)) < 0)