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 | |
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')
-rw-r--r-- | net/9p/client.c | 2 | ||||
-rw-r--r-- | net/bluetooth/6lowpan.c | 2 | ||||
-rw-r--r-- | net/bluetooth/a2mp.c | 2 | ||||
-rw-r--r-- | net/bluetooth/smp.c | 2 | ||||
-rw-r--r-- | net/ceph/messenger.c | 6 | ||||
-rw-r--r-- | net/netfilter/ipvs/ip_vs_sync.c | 2 | ||||
-rw-r--r-- | net/smc/smc_clc.c | 4 | ||||
-rw-r--r-- | net/socket.c | 6 | ||||
-rw-r--r-- | net/sunrpc/svcsock.c | 2 | ||||
-rw-r--r-- | net/tipc/topsrv.c | 2 | ||||
-rw-r--r-- | net/tls/tls_device.c | 4 |
11 files changed, 17 insertions, 17 deletions
diff --git a/net/9p/client.c b/net/9p/client.c index deae53a7dffc..a9cd1401bd09 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
@@ -2070,7 +2070,7 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset) | |||
2070 | struct kvec kv = {.iov_base = data, .iov_len = count}; | 2070 | struct kvec kv = {.iov_base = data, .iov_len = count}; |
2071 | struct iov_iter to; | 2071 | struct iov_iter to; |
2072 | 2072 | ||
2073 | iov_iter_kvec(&to, READ | ITER_KVEC, &kv, 1, count); | 2073 | iov_iter_kvec(&to, READ, &kv, 1, count); |
2074 | 2074 | ||
2075 | p9_debug(P9_DEBUG_9P, ">>> TREADDIR fid %d offset %llu count %d\n", | 2075 | p9_debug(P9_DEBUG_9P, ">>> TREADDIR fid %d offset %llu count %d\n", |
2076 | fid->fid, (unsigned long long) offset, count); | 2076 | fid->fid, (unsigned long long) offset, count); |
diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c index 4e2576fc0c59..828e87fe8027 100644 --- a/net/bluetooth/6lowpan.c +++ b/net/bluetooth/6lowpan.c | |||
@@ -467,7 +467,7 @@ static int send_pkt(struct l2cap_chan *chan, struct sk_buff *skb, | |||
467 | iv.iov_len = skb->len; | 467 | iv.iov_len = skb->len; |
468 | 468 | ||
469 | memset(&msg, 0, sizeof(msg)); | 469 | memset(&msg, 0, sizeof(msg)); |
470 | iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iv, 1, skb->len); | 470 | iov_iter_kvec(&msg.msg_iter, WRITE, &iv, 1, skb->len); |
471 | 471 | ||
472 | err = l2cap_chan_send(chan, &msg, skb->len); | 472 | err = l2cap_chan_send(chan, &msg, skb->len); |
473 | if (err > 0) { | 473 | if (err > 0) { |
diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c index 51c2cf2d8923..58fc6333d412 100644 --- a/net/bluetooth/a2mp.c +++ b/net/bluetooth/a2mp.c | |||
@@ -63,7 +63,7 @@ static void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, void *dat | |||
63 | 63 | ||
64 | memset(&msg, 0, sizeof(msg)); | 64 | memset(&msg, 0, sizeof(msg)); |
65 | 65 | ||
66 | iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iv, 1, total_len); | 66 | iov_iter_kvec(&msg.msg_iter, WRITE, &iv, 1, total_len); |
67 | 67 | ||
68 | l2cap_chan_send(chan, &msg, total_len); | 68 | l2cap_chan_send(chan, &msg, total_len); |
69 | 69 | ||
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c index a1c1b7e8a45c..c822e626761b 100644 --- a/net/bluetooth/smp.c +++ b/net/bluetooth/smp.c | |||
@@ -622,7 +622,7 @@ static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data) | |||
622 | 622 | ||
623 | memset(&msg, 0, sizeof(msg)); | 623 | memset(&msg, 0, sizeof(msg)); |
624 | 624 | ||
625 | iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, iv, 2, 1 + len); | 625 | iov_iter_kvec(&msg.msg_iter, WRITE, iv, 2, 1 + len); |
626 | 626 | ||
627 | l2cap_chan_send(chan, &msg, 1 + len); | 627 | l2cap_chan_send(chan, &msg, 1 + len); |
628 | 628 | ||
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index 0a187196aeed..e493ff77b378 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c | |||
@@ -526,7 +526,7 @@ static int ceph_tcp_recvmsg(struct socket *sock, void *buf, size_t len) | |||
526 | if (!buf) | 526 | if (!buf) |
527 | msg.msg_flags |= MSG_TRUNC; | 527 | msg.msg_flags |= MSG_TRUNC; |
528 | 528 | ||
529 | iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, len); | 529 | iov_iter_kvec(&msg.msg_iter, READ, &iov, 1, len); |
530 | r = sock_recvmsg(sock, &msg, msg.msg_flags); | 530 | r = sock_recvmsg(sock, &msg, msg.msg_flags); |
531 | if (r == -EAGAIN) | 531 | if (r == -EAGAIN) |
532 | r = 0; | 532 | r = 0; |
@@ -545,7 +545,7 @@ static int ceph_tcp_recvpage(struct socket *sock, struct page *page, | |||
545 | int r; | 545 | int r; |
546 | 546 | ||
547 | BUG_ON(page_offset + length > PAGE_SIZE); | 547 | BUG_ON(page_offset + length > PAGE_SIZE); |
548 | iov_iter_bvec(&msg.msg_iter, READ | ITER_BVEC, &bvec, 1, length); | 548 | iov_iter_bvec(&msg.msg_iter, READ, &bvec, 1, length); |
549 | r = sock_recvmsg(sock, &msg, msg.msg_flags); | 549 | r = sock_recvmsg(sock, &msg, msg.msg_flags); |
550 | if (r == -EAGAIN) | 550 | if (r == -EAGAIN) |
551 | r = 0; | 551 | r = 0; |
@@ -607,7 +607,7 @@ static int ceph_tcp_sendpage(struct socket *sock, struct page *page, | |||
607 | else | 607 | else |
608 | msg.msg_flags |= MSG_EOR; /* superfluous, but what the hell */ | 608 | msg.msg_flags |= MSG_EOR; /* superfluous, but what the hell */ |
609 | 609 | ||
610 | iov_iter_bvec(&msg.msg_iter, WRITE | ITER_BVEC, &bvec, 1, size); | 610 | iov_iter_bvec(&msg.msg_iter, WRITE, &bvec, 1, size); |
611 | ret = sock_sendmsg(sock, &msg); | 611 | ret = sock_sendmsg(sock, &msg); |
612 | if (ret == -EAGAIN) | 612 | if (ret == -EAGAIN) |
613 | ret = 0; | 613 | ret = 0; |
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c index d4020c5e831d..2526be6b3d90 100644 --- a/net/netfilter/ipvs/ip_vs_sync.c +++ b/net/netfilter/ipvs/ip_vs_sync.c | |||
@@ -1616,7 +1616,7 @@ ip_vs_receive(struct socket *sock, char *buffer, const size_t buflen) | |||
1616 | EnterFunction(7); | 1616 | EnterFunction(7); |
1617 | 1617 | ||
1618 | /* Receive a packet */ | 1618 | /* Receive a packet */ |
1619 | iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, buflen); | 1619 | iov_iter_kvec(&msg.msg_iter, READ, &iov, 1, buflen); |
1620 | len = sock_recvmsg(sock, &msg, MSG_DONTWAIT); | 1620 | len = sock_recvmsg(sock, &msg, MSG_DONTWAIT); |
1621 | if (len < 0) | 1621 | if (len < 0) |
1622 | return len; | 1622 | return len; |
diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c index 52241d679cc9..89c3a8c7859a 100644 --- a/net/smc/smc_clc.c +++ b/net/smc/smc_clc.c | |||
@@ -286,7 +286,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen, | |||
286 | */ | 286 | */ |
287 | krflags = MSG_PEEK | MSG_WAITALL; | 287 | krflags = MSG_PEEK | MSG_WAITALL; |
288 | smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME; | 288 | smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME; |
289 | iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &vec, 1, | 289 | iov_iter_kvec(&msg.msg_iter, READ, &vec, 1, |
290 | sizeof(struct smc_clc_msg_hdr)); | 290 | sizeof(struct smc_clc_msg_hdr)); |
291 | len = sock_recvmsg(smc->clcsock, &msg, krflags); | 291 | len = sock_recvmsg(smc->clcsock, &msg, krflags); |
292 | if (signal_pending(current)) { | 292 | if (signal_pending(current)) { |
@@ -325,7 +325,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen, | |||
325 | 325 | ||
326 | /* receive the complete CLC message */ | 326 | /* receive the complete CLC message */ |
327 | memset(&msg, 0, sizeof(struct msghdr)); | 327 | memset(&msg, 0, sizeof(struct msghdr)); |
328 | iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &vec, 1, datlen); | 328 | iov_iter_kvec(&msg.msg_iter, READ, &vec, 1, datlen); |
329 | krflags = MSG_WAITALL; | 329 | krflags = MSG_WAITALL; |
330 | len = sock_recvmsg(smc->clcsock, &msg, krflags); | 330 | len = sock_recvmsg(smc->clcsock, &msg, krflags); |
331 | if (len < datlen || !smc_clc_msg_hdr_valid(clcm)) { | 331 | if (len < datlen || !smc_clc_msg_hdr_valid(clcm)) { |
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); |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 5445145e639c..0b46ec0bf74e 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -338,7 +338,7 @@ static int svc_recvfrom(struct svc_rqst *rqstp, struct kvec *iov, int nr, | |||
338 | rqstp->rq_xprt_hlen = 0; | 338 | rqstp->rq_xprt_hlen = 0; |
339 | 339 | ||
340 | clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 340 | clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
341 | iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, iov, nr, buflen); | 341 | iov_iter_kvec(&msg.msg_iter, READ, iov, nr, buflen); |
342 | len = sock_recvmsg(svsk->sk_sock, &msg, msg.msg_flags); | 342 | len = sock_recvmsg(svsk->sk_sock, &msg, msg.msg_flags); |
343 | /* If we read a full record, then assume there may be more | 343 | /* If we read a full record, then assume there may be more |
344 | * data to read (stream based sockets only!) | 344 | * data to read (stream based sockets only!) |
diff --git a/net/tipc/topsrv.c b/net/tipc/topsrv.c index d8956f7daac4..afa02eeec403 100644 --- a/net/tipc/topsrv.c +++ b/net/tipc/topsrv.c | |||
@@ -394,7 +394,7 @@ static int tipc_conn_rcv_from_sock(struct tipc_conn *con) | |||
394 | iov.iov_base = &s; | 394 | iov.iov_base = &s; |
395 | iov.iov_len = sizeof(s); | 395 | iov.iov_len = sizeof(s); |
396 | msg.msg_name = NULL; | 396 | msg.msg_name = NULL; |
397 | iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, iov.iov_len); | 397 | iov_iter_kvec(&msg.msg_iter, READ, &iov, 1, iov.iov_len); |
398 | ret = sock_recvmsg(con->sock, &msg, MSG_DONTWAIT); | 398 | ret = sock_recvmsg(con->sock, &msg, MSG_DONTWAIT); |
399 | if (ret == -EWOULDBLOCK) | 399 | if (ret == -EWOULDBLOCK) |
400 | return -EWOULDBLOCK; | 400 | return -EWOULDBLOCK; |
diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c index 276edbc04f38..d753e362d2d9 100644 --- a/net/tls/tls_device.c +++ b/net/tls/tls_device.c | |||
@@ -489,7 +489,7 @@ int tls_device_sendpage(struct sock *sk, struct page *page, | |||
489 | 489 | ||
490 | iov.iov_base = kaddr + offset; | 490 | iov.iov_base = kaddr + offset; |
491 | iov.iov_len = size; | 491 | iov.iov_len = size; |
492 | iov_iter_kvec(&msg_iter, WRITE | ITER_KVEC, &iov, 1, size); | 492 | iov_iter_kvec(&msg_iter, WRITE, &iov, 1, size); |
493 | rc = tls_push_data(sk, &msg_iter, size, | 493 | rc = tls_push_data(sk, &msg_iter, size, |
494 | flags, TLS_RECORD_TYPE_DATA); | 494 | flags, TLS_RECORD_TYPE_DATA); |
495 | kunmap(page); | 495 | kunmap(page); |
@@ -538,7 +538,7 @@ static int tls_device_push_pending_record(struct sock *sk, int flags) | |||
538 | { | 538 | { |
539 | struct iov_iter msg_iter; | 539 | struct iov_iter msg_iter; |
540 | 540 | ||
541 | iov_iter_kvec(&msg_iter, WRITE | ITER_KVEC, NULL, 0, 0); | 541 | iov_iter_kvec(&msg_iter, WRITE, NULL, 0, 0); |
542 | return tls_push_data(sk, &msg_iter, 0, flags, TLS_RECORD_TYPE_DATA); | 542 | return tls_push_data(sk, &msg_iter, 0, flags, TLS_RECORD_TYPE_DATA); |
543 | } | 543 | } |
544 | 544 | ||