]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/block/drbd/drbd_main.c
Merge branch 'work.sendmsg' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[mirror_ubuntu-artful-kernel.git] / drivers / block / drbd / drbd_main.c
index 116509852a34da5730402edfedd025afd1b4a934..37000c6bb7f40edf3d7ec59bf7d49c2a42fa6bed 100644 (file)
@@ -1846,7 +1846,7 @@ int drbd_send_out_of_sync(struct drbd_peer_device *peer_device, struct drbd_requ
 int drbd_send(struct drbd_connection *connection, struct socket *sock,
              void *buf, size_t size, unsigned msg_flags)
 {
-       struct kvec iov;
+       struct kvec iov = {.iov_base = buf, .iov_len = size};
        struct msghdr msg;
        int rv, sent = 0;
 
@@ -1855,15 +1855,14 @@ int drbd_send(struct drbd_connection *connection, struct socket *sock,
 
        /* THINK  if (signal_pending) return ... ? */
 
-       iov.iov_base = buf;
-       iov.iov_len  = size;
-
        msg.msg_name       = NULL;
        msg.msg_namelen    = 0;
        msg.msg_control    = NULL;
        msg.msg_controllen = 0;
        msg.msg_flags      = msg_flags | MSG_NOSIGNAL;
 
+       iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iov, 1, size);
+
        if (sock == connection->data.socket) {
                rcu_read_lock();
                connection->ko_count = rcu_dereference(connection->net_conf)->ko_count;
@@ -1871,7 +1870,7 @@ int drbd_send(struct drbd_connection *connection, struct socket *sock,
                drbd_update_congested(connection);
        }
        do {
-               rv = kernel_sendmsg(sock, &msg, &iov, 1, iov.iov_len);
+               rv = sock_sendmsg(sock, &msg);
                if (rv == -EAGAIN) {
                        if (we_should_drop_the_connection(connection, sock))
                                break;
@@ -1885,8 +1884,6 @@ int drbd_send(struct drbd_connection *connection, struct socket *sock,
                if (rv < 0)
                        break;
                sent += rv;
-               iov.iov_base += rv;
-               iov.iov_len  -= rv;
        } while (sent < size);
 
        if (sock == connection->data.socket)