]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
smc: switch to sock_recvmsg()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 21 Sep 2017 00:21:22 +0000 (20:21 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Dec 2017 01:38:09 +0000 (20:38 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
net/smc/smc_clc.c

index 1800e16b2a0231347f3dedad3482e0f637ddebd4..511548085d168bcb5ec334627442cb077ce1033c 100644 (file)
@@ -35,7 +35,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
        struct smc_clc_msg_hdr *clcm = buf;
        struct msghdr msg = {NULL, 0};
        int reason_code = 0;
-       struct kvec vec;
+       struct kvec vec = {buf, buflen};
        int len, datlen;
        int krflags;
 
@@ -43,12 +43,15 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
         * so we don't consume any subsequent CLC message or payload data
         * in the TCP byte stream
         */
-       vec.iov_base = buf;
-       vec.iov_len = buflen;
+       /*
+        * Caller must make sure that buflen is no less than
+        * sizeof(struct smc_clc_msg_hdr)
+        */
        krflags = MSG_PEEK | MSG_WAITALL;
        smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME;
-       len = kernel_recvmsg(smc->clcsock, &msg, &vec, 1,
-                            sizeof(struct smc_clc_msg_hdr), krflags);
+       iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &vec, 1,
+                       sizeof(struct smc_clc_msg_hdr));
+       len = sock_recvmsg(smc->clcsock, &msg, krflags);
        if (signal_pending(current)) {
                reason_code = -EINTR;
                clc_sk->sk_err = EINTR;
@@ -83,12 +86,11 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
        }
 
        /* receive the complete CLC message */
-       vec.iov_base = buf;
-       vec.iov_len = buflen;
        memset(&msg, 0, sizeof(struct msghdr));
+       iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &vec, 1, buflen);
        krflags = MSG_WAITALL;
        smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME;
-       len = kernel_recvmsg(smc->clcsock, &msg, &vec, 1, datlen, krflags);
+       len = sock_recvmsg(smc->clcsock, &msg, krflags);
        if (len < datlen) {
                smc->sk.sk_err = EPROTO;
                reason_code = -EPROTO;