aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2016-04-14 00:39:15 -0400
committerDavid S. Miller <davem@davemloft.net>2016-04-14 00:39:15 -0400
commit6c61403daea578dcfe84f187c204db1a3fa3d6ae (patch)
tree76418aa08d196b20920d6ec94dc2b586c1ff2c3f
parent743b03a83297690f0bd38c452a3bbb47d2be300a (diff)
parent2da62906b1e298695e1bb725927041cd59942c98 (diff)
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
-rw-r--r--drivers/target/iscsi/iscsi_target_util.c5
-rw-r--r--include/linux/net.h3
-rw-r--r--net/socket.c23
3 files changed, 13 insertions, 18 deletions
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c
index 428b0d9e3dba..57720385a751 100644
--- a/drivers/target/iscsi/iscsi_target_util.c
+++ b/drivers/target/iscsi/iscsi_target_util.c
@@ -1283,9 +1283,8 @@ static int iscsit_do_rx_data(
1283 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, 1283 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC,
1284 count->iov, count->iov_count, data); 1284 count->iov, count->iov_count, data);
1285 1285
1286 while (total_rx < data) { 1286 while (msg_data_left(&msg)) {
1287 rx_loop = sock_recvmsg(conn->sock, &msg, 1287 rx_loop = sock_recvmsg(conn->sock, &msg, MSG_WAITALL);
1288 (data - total_rx), MSG_WAITALL);
1289 if (rx_loop <= 0) { 1288 if (rx_loop <= 0) {
1290 pr_debug("rx_loop: %d total_rx: %d\n", 1289 pr_debug("rx_loop: %d total_rx: %d\n",
1291 rx_loop, total_rx); 1290 rx_loop, total_rx);
diff --git a/include/linux/net.h b/include/linux/net.h
index 49175e4ced11..72c1e0622ce2 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -218,8 +218,7 @@ int sock_create_lite(int family, int type, int proto, struct socket **res);
218struct socket *sock_alloc(void); 218struct socket *sock_alloc(void);
219void sock_release(struct socket *sock); 219void sock_release(struct socket *sock);
220int sock_sendmsg(struct socket *sock, struct msghdr *msg); 220int sock_sendmsg(struct socket *sock, struct msghdr *msg);
221int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, 221int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags);
222 int flags);
223struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname); 222struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname);
224struct socket *sockfd_lookup(int fd, int *err); 223struct socket *sockfd_lookup(int fd, int *err);
225struct socket *sock_from_file(struct file *file, int *err); 224struct socket *sock_from_file(struct file *file, int *err);
diff --git a/net/socket.c b/net/socket.c
index afa3c3470717..5dbb0bbe12a7 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -709,17 +709,16 @@ void __sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
709EXPORT_SYMBOL_GPL(__sock_recv_ts_and_drops); 709EXPORT_SYMBOL_GPL(__sock_recv_ts_and_drops);
710 710
711static inline int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg, 711static inline int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg,
712 size_t size, int flags) 712 int flags)
713{ 713{
714 return sock->ops->recvmsg(sock, msg, size, flags); 714 return sock->ops->recvmsg(sock, msg, msg_data_left(msg), flags);
715} 715}
716 716
717int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, 717int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags)
718 int flags)
719{ 718{
720 int err = security_socket_recvmsg(sock, msg, size, flags); 719 int err = security_socket_recvmsg(sock, msg, msg_data_left(msg), flags);
721 720
722 return err ?: sock_recvmsg_nosec(sock, msg, size, flags); 721 return err ?: sock_recvmsg_nosec(sock, msg, flags);
723} 722}
724EXPORT_SYMBOL(sock_recvmsg); 723EXPORT_SYMBOL(sock_recvmsg);
725 724
@@ -746,7 +745,7 @@ int kernel_recvmsg(struct socket *sock, struct msghdr *msg,
746 745
747 iov_iter_kvec(&msg->msg_iter, READ | ITER_KVEC, vec, num, size); 746 iov_iter_kvec(&msg->msg_iter, READ | ITER_KVEC, vec, num, size);
748 set_fs(KERNEL_DS); 747 set_fs(KERNEL_DS);
749 result = sock_recvmsg(sock, msg, size, flags); 748 result = sock_recvmsg(sock, msg, flags);
750 set_fs(oldfs); 749 set_fs(oldfs);
751 return result; 750 return result;
752} 751}
@@ -796,7 +795,7 @@ static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to)
796 if (!iov_iter_count(to)) /* Match SYS5 behaviour */ 795 if (!iov_iter_count(to)) /* Match SYS5 behaviour */
797 return 0; 796 return 0;
798 797
799 res = sock_recvmsg(sock, &msg, iov_iter_count(to), msg.msg_flags); 798 res = sock_recvmsg(sock, &msg, msg.msg_flags);
800 *to = msg.msg_iter; 799 *to = msg.msg_iter;
801 return res; 800 return res;
802} 801}
@@ -1696,7 +1695,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
1696 msg.msg_iocb = NULL; 1695 msg.msg_iocb = NULL;
1697 if (sock->file->f_flags & O_NONBLOCK) 1696 if (sock->file->f_flags & O_NONBLOCK)
1698 flags |= MSG_DONTWAIT; 1697 flags |= MSG_DONTWAIT;
1699 err = sock_recvmsg(sock, &msg, iov_iter_count(&msg.msg_iter), flags); 1698 err = sock_recvmsg(sock, &msg, flags);
1700 1699
1701 if (err >= 0 && addr != NULL) { 1700 if (err >= 0 && addr != NULL) {
1702 err2 = move_addr_to_user(&address, 1701 err2 = move_addr_to_user(&address,
@@ -2073,7 +2072,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
2073 struct iovec iovstack[UIO_FASTIOV]; 2072 struct iovec iovstack[UIO_FASTIOV];
2074 struct iovec *iov = iovstack; 2073 struct iovec *iov = iovstack;
2075 unsigned long cmsg_ptr; 2074 unsigned long cmsg_ptr;
2076 int total_len, len; 2075 int len;
2077 ssize_t err; 2076 ssize_t err;
2078 2077
2079 /* kernel mode address */ 2078 /* kernel mode address */
@@ -2091,7 +2090,6 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
2091 err = copy_msghdr_from_user(msg_sys, msg, &uaddr, &iov); 2090 err = copy_msghdr_from_user(msg_sys, msg, &uaddr, &iov);
2092 if (err < 0) 2091 if (err < 0)
2093 return err; 2092 return err;
2094 total_len = iov_iter_count(&msg_sys->msg_iter);
2095 2093
2096 cmsg_ptr = (unsigned long)msg_sys->msg_control; 2094 cmsg_ptr = (unsigned long)msg_sys->msg_control;
2097 msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT); 2095 msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
@@ -2101,8 +2099,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
2101 2099
2102 if (sock->file->f_flags & O_NONBLOCK) 2100 if (sock->file->f_flags & O_NONBLOCK)
2103 flags |= MSG_DONTWAIT; 2101 flags |= MSG_DONTWAIT;
2104 err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys, 2102 err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys, flags);
2105 total_len, flags);
2106 if (err < 0) 2103 if (err < 0)
2107 goto out_freeiov; 2104 goto out_freeiov;
2108 len = err; 2105 len = err;