{
        struct l1oip *hc = (struct l1oip *)data;
        int ret = 0;
-       struct msghdr msg;
        struct sockaddr_in sin_rx;
+       struct kvec iov;
+       struct msghdr msg = {.msg_name = &sin_rx,
+                            .msg_namelen = sizeof(sin_rx)};
        unsigned char *recvbuf;
        size_t recvbuf_size = 1500;
        int recvlen;
                goto fail;
        }
 
+       iov.iov_base = recvbuf;
+       iov.iov_len = recvbuf_size;
+
        /* make daemon */
        allow_signal(SIGTERM);
 
                goto fail;
        }
 
-       /* build receive message */
-       msg.msg_name = &sin_rx;
-       msg.msg_namelen = sizeof(sin_rx);
-       msg.msg_control = NULL;
-       msg.msg_controllen = 0;
-
        /* build send message */
        hc->sendmsg.msg_name = &hc->sin_remote;
        hc->sendmsg.msg_namelen = sizeof(hc->sin_remote);
                printk(KERN_DEBUG "%s: socket created and open\n",
                       __func__);
        while (!signal_pending(current)) {
-               struct kvec iov = {
-                       .iov_base = recvbuf,
-                       .iov_len = recvbuf_size,
-               };
-               recvlen = kernel_recvmsg(socket, &msg, &iov, 1,
-                                        recvbuf_size, 0);
+               iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1,
+                               recvbuf_size);
+               recvlen = sock_recvmsg(socket, &msg, 0);
                if (recvlen > 0) {
                        l1oip_socket_parse(hc, &sin_rx, recvbuf, recvlen);
                } else {