diff options
author | David Howells <dhowells@redhat.com> | 2018-10-19 19:57:56 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2018-10-23 19:41:07 -0400 |
commit | aa563d7bca6e882ec2bdae24603c8f016401a144 (patch) | |
tree | 874b10fc11da3178e4630f7a430e1b299d3b3806 /net/socket.c | |
parent | 00e23707442a75b404392cef1405ab4fd498de6b (diff) |
iov_iter: Separate type from direction and use accessor functions
In the iov_iter struct, separate the iterator type from the iterator
direction and use accessor functions to access them in most places.
Convert a bunch of places to use switch-statements to access them rather
then chains of bitwise-AND statements. This makes it easier to add further
iterator types. Also, this can be more efficient as to implement a switch
of small contiguous integers, the compiler can use ~50% fewer compare
instructions than it has to use bitwise-and instructions.
Further, cease passing the iterator type into the iterator setup function.
The iterator function can set that itself. Only the direction is required.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/socket.c b/net/socket.c index b68801c7d0ab..fae408abea54 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -635,7 +635,7 @@ EXPORT_SYMBOL(sock_sendmsg); | |||
635 | int kernel_sendmsg(struct socket *sock, struct msghdr *msg, | 635 | int kernel_sendmsg(struct socket *sock, struct msghdr *msg, |
636 | struct kvec *vec, size_t num, size_t size) | 636 | struct kvec *vec, size_t num, size_t size) |
637 | { | 637 | { |
638 | iov_iter_kvec(&msg->msg_iter, WRITE | ITER_KVEC, vec, num, size); | 638 | iov_iter_kvec(&msg->msg_iter, WRITE, vec, num, size); |
639 | return sock_sendmsg(sock, msg); | 639 | return sock_sendmsg(sock, msg); |
640 | } | 640 | } |
641 | EXPORT_SYMBOL(kernel_sendmsg); | 641 | EXPORT_SYMBOL(kernel_sendmsg); |
@@ -648,7 +648,7 @@ int kernel_sendmsg_locked(struct sock *sk, struct msghdr *msg, | |||
648 | if (!sock->ops->sendmsg_locked) | 648 | if (!sock->ops->sendmsg_locked) |
649 | return sock_no_sendmsg_locked(sk, msg, size); | 649 | return sock_no_sendmsg_locked(sk, msg, size); |
650 | 650 | ||
651 | iov_iter_kvec(&msg->msg_iter, WRITE | ITER_KVEC, vec, num, size); | 651 | iov_iter_kvec(&msg->msg_iter, WRITE, vec, num, size); |
652 | 652 | ||
653 | return sock->ops->sendmsg_locked(sk, msg, msg_data_left(msg)); | 653 | return sock->ops->sendmsg_locked(sk, msg, msg_data_left(msg)); |
654 | } | 654 | } |
@@ -823,7 +823,7 @@ int kernel_recvmsg(struct socket *sock, struct msghdr *msg, | |||
823 | mm_segment_t oldfs = get_fs(); | 823 | mm_segment_t oldfs = get_fs(); |
824 | int result; | 824 | int result; |
825 | 825 | ||
826 | iov_iter_kvec(&msg->msg_iter, READ | ITER_KVEC, vec, num, size); | 826 | iov_iter_kvec(&msg->msg_iter, READ, vec, num, size); |
827 | set_fs(KERNEL_DS); | 827 | set_fs(KERNEL_DS); |
828 | result = sock_recvmsg(sock, msg, flags); | 828 | result = sock_recvmsg(sock, msg, flags); |
829 | set_fs(oldfs); | 829 | set_fs(oldfs); |