diff options
author | Eric Dumazet <edumazet@google.com> | 2019-10-24 01:44:50 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-10-28 16:33:41 -0400 |
commit | 3ef7cf57c72f32f61e97f8fa401bc39ea1f1a5d4 (patch) | |
tree | 7f962942a142ed611e6c063171ef0092f8af8fd8 | |
parent | 137a0dbe3426fd7bcfe3f8117b36a87b3590e4eb (diff) |
net: use skb_queue_empty_lockless() in poll() handlers
Many poll() handlers are lockless. Using skb_queue_empty_lockless()
instead of skb_queue_empty() is more appropriate.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/isdn/capi/capi.c | 2 | ||||
-rw-r--r-- | net/atm/common.c | 2 | ||||
-rw-r--r-- | net/bluetooth/af_bluetooth.c | 4 | ||||
-rw-r--r-- | net/caif/caif_socket.c | 2 | ||||
-rw-r--r-- | net/core/datagram.c | 4 | ||||
-rw-r--r-- | net/decnet/af_decnet.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp.c | 2 | ||||
-rw-r--r-- | net/ipv4/udp.c | 2 | ||||
-rw-r--r-- | net/nfc/llcp_sock.c | 4 | ||||
-rw-r--r-- | net/phonet/socket.c | 4 | ||||
-rw-r--r-- | net/sctp/socket.c | 4 | ||||
-rw-r--r-- | net/tipc/socket.c | 4 | ||||
-rw-r--r-- | net/unix/af_unix.c | 6 | ||||
-rw-r--r-- | net/vmw_vsock/af_vsock.c | 2 |
14 files changed, 22 insertions, 22 deletions
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c index c92b405b7646..ba8619524231 100644 --- a/drivers/isdn/capi/capi.c +++ b/drivers/isdn/capi/capi.c | |||
@@ -744,7 +744,7 @@ capi_poll(struct file *file, poll_table *wait) | |||
744 | 744 | ||
745 | poll_wait(file, &(cdev->recvwait), wait); | 745 | poll_wait(file, &(cdev->recvwait), wait); |
746 | mask = EPOLLOUT | EPOLLWRNORM; | 746 | mask = EPOLLOUT | EPOLLWRNORM; |
747 | if (!skb_queue_empty(&cdev->recvqueue)) | 747 | if (!skb_queue_empty_lockless(&cdev->recvqueue)) |
748 | mask |= EPOLLIN | EPOLLRDNORM; | 748 | mask |= EPOLLIN | EPOLLRDNORM; |
749 | return mask; | 749 | return mask; |
750 | } | 750 | } |
diff --git a/net/atm/common.c b/net/atm/common.c index b7528e77997c..0ce530af534d 100644 --- a/net/atm/common.c +++ b/net/atm/common.c | |||
@@ -668,7 +668,7 @@ __poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait) | |||
668 | mask |= EPOLLHUP; | 668 | mask |= EPOLLHUP; |
669 | 669 | ||
670 | /* readable? */ | 670 | /* readable? */ |
671 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 671 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
672 | mask |= EPOLLIN | EPOLLRDNORM; | 672 | mask |= EPOLLIN | EPOLLRDNORM; |
673 | 673 | ||
674 | /* writable? */ | 674 | /* writable? */ |
diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c index 94ddf19998c7..5f508c50649d 100644 --- a/net/bluetooth/af_bluetooth.c +++ b/net/bluetooth/af_bluetooth.c | |||
@@ -460,7 +460,7 @@ __poll_t bt_sock_poll(struct file *file, struct socket *sock, | |||
460 | if (sk->sk_state == BT_LISTEN) | 460 | if (sk->sk_state == BT_LISTEN) |
461 | return bt_accept_poll(sk); | 461 | return bt_accept_poll(sk); |
462 | 462 | ||
463 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) | 463 | if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) |
464 | mask |= EPOLLERR | | 464 | mask |= EPOLLERR | |
465 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); | 465 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); |
466 | 466 | ||
@@ -470,7 +470,7 @@ __poll_t bt_sock_poll(struct file *file, struct socket *sock, | |||
470 | if (sk->sk_shutdown == SHUTDOWN_MASK) | 470 | if (sk->sk_shutdown == SHUTDOWN_MASK) |
471 | mask |= EPOLLHUP; | 471 | mask |= EPOLLHUP; |
472 | 472 | ||
473 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 473 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
474 | mask |= EPOLLIN | EPOLLRDNORM; | 474 | mask |= EPOLLIN | EPOLLRDNORM; |
475 | 475 | ||
476 | if (sk->sk_state == BT_CLOSED) | 476 | if (sk->sk_state == BT_CLOSED) |
diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c index 13ea920600ae..ef14da50a981 100644 --- a/net/caif/caif_socket.c +++ b/net/caif/caif_socket.c | |||
@@ -953,7 +953,7 @@ static __poll_t caif_poll(struct file *file, | |||
953 | mask |= EPOLLRDHUP; | 953 | mask |= EPOLLRDHUP; |
954 | 954 | ||
955 | /* readable? */ | 955 | /* readable? */ |
956 | if (!skb_queue_empty(&sk->sk_receive_queue) || | 956 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue) || |
957 | (sk->sk_shutdown & RCV_SHUTDOWN)) | 957 | (sk->sk_shutdown & RCV_SHUTDOWN)) |
958 | mask |= EPOLLIN | EPOLLRDNORM; | 958 | mask |= EPOLLIN | EPOLLRDNORM; |
959 | 959 | ||
diff --git a/net/core/datagram.c b/net/core/datagram.c index c210fc116103..5b685e110aff 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c | |||
@@ -767,7 +767,7 @@ __poll_t datagram_poll(struct file *file, struct socket *sock, | |||
767 | mask = 0; | 767 | mask = 0; |
768 | 768 | ||
769 | /* exceptional events? */ | 769 | /* exceptional events? */ |
770 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) | 770 | if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) |
771 | mask |= EPOLLERR | | 771 | mask |= EPOLLERR | |
772 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); | 772 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); |
773 | 773 | ||
@@ -777,7 +777,7 @@ __poll_t datagram_poll(struct file *file, struct socket *sock, | |||
777 | mask |= EPOLLHUP; | 777 | mask |= EPOLLHUP; |
778 | 778 | ||
779 | /* readable? */ | 779 | /* readable? */ |
780 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 780 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
781 | mask |= EPOLLIN | EPOLLRDNORM; | 781 | mask |= EPOLLIN | EPOLLRDNORM; |
782 | 782 | ||
783 | /* Connection-based need to check for termination and startup */ | 783 | /* Connection-based need to check for termination and startup */ |
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c index 0ea75286abf4..3349ea81f901 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c | |||
@@ -1205,7 +1205,7 @@ static __poll_t dn_poll(struct file *file, struct socket *sock, poll_table *wai | |||
1205 | struct dn_scp *scp = DN_SK(sk); | 1205 | struct dn_scp *scp = DN_SK(sk); |
1206 | __poll_t mask = datagram_poll(file, sock, wait); | 1206 | __poll_t mask = datagram_poll(file, sock, wait); |
1207 | 1207 | ||
1208 | if (!skb_queue_empty(&scp->other_receive_queue)) | 1208 | if (!skb_queue_empty_lockless(&scp->other_receive_queue)) |
1209 | mask |= EPOLLRDBAND; | 1209 | mask |= EPOLLRDBAND; |
1210 | 1210 | ||
1211 | return mask; | 1211 | return mask; |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 42187a3b82f4..ffef502f5292 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -584,7 +584,7 @@ __poll_t tcp_poll(struct file *file, struct socket *sock, poll_table *wait) | |||
584 | } | 584 | } |
585 | /* This barrier is coupled with smp_wmb() in tcp_reset() */ | 585 | /* This barrier is coupled with smp_wmb() in tcp_reset() */ |
586 | smp_rmb(); | 586 | smp_rmb(); |
587 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) | 587 | if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) |
588 | mask |= EPOLLERR; | 588 | mask |= EPOLLERR; |
589 | 589 | ||
590 | return mask; | 590 | return mask; |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 2cc259736c2e..345a3d43f5a6 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -2712,7 +2712,7 @@ __poll_t udp_poll(struct file *file, struct socket *sock, poll_table *wait) | |||
2712 | __poll_t mask = datagram_poll(file, sock, wait); | 2712 | __poll_t mask = datagram_poll(file, sock, wait); |
2713 | struct sock *sk = sock->sk; | 2713 | struct sock *sk = sock->sk; |
2714 | 2714 | ||
2715 | if (!skb_queue_empty(&udp_sk(sk)->reader_queue)) | 2715 | if (!skb_queue_empty_lockless(&udp_sk(sk)->reader_queue)) |
2716 | mask |= EPOLLIN | EPOLLRDNORM; | 2716 | mask |= EPOLLIN | EPOLLRDNORM; |
2717 | 2717 | ||
2718 | /* Check for false positives due to checksum errors */ | 2718 | /* Check for false positives due to checksum errors */ |
diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c index ccdd790e163a..28604414dec1 100644 --- a/net/nfc/llcp_sock.c +++ b/net/nfc/llcp_sock.c | |||
@@ -554,11 +554,11 @@ static __poll_t llcp_sock_poll(struct file *file, struct socket *sock, | |||
554 | if (sk->sk_state == LLCP_LISTEN) | 554 | if (sk->sk_state == LLCP_LISTEN) |
555 | return llcp_accept_poll(sk); | 555 | return llcp_accept_poll(sk); |
556 | 556 | ||
557 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) | 557 | if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) |
558 | mask |= EPOLLERR | | 558 | mask |= EPOLLERR | |
559 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); | 559 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); |
560 | 560 | ||
561 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 561 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
562 | mask |= EPOLLIN | EPOLLRDNORM; | 562 | mask |= EPOLLIN | EPOLLRDNORM; |
563 | 563 | ||
564 | if (sk->sk_state == LLCP_CLOSED) | 564 | if (sk->sk_state == LLCP_CLOSED) |
diff --git a/net/phonet/socket.c b/net/phonet/socket.c index 96ea9f254ae9..76d499f6af9a 100644 --- a/net/phonet/socket.c +++ b/net/phonet/socket.c | |||
@@ -338,9 +338,9 @@ static __poll_t pn_socket_poll(struct file *file, struct socket *sock, | |||
338 | 338 | ||
339 | if (sk->sk_state == TCP_CLOSE) | 339 | if (sk->sk_state == TCP_CLOSE) |
340 | return EPOLLERR; | 340 | return EPOLLERR; |
341 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 341 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
342 | mask |= EPOLLIN | EPOLLRDNORM; | 342 | mask |= EPOLLIN | EPOLLRDNORM; |
343 | if (!skb_queue_empty(&pn->ctrlreq_queue)) | 343 | if (!skb_queue_empty_lockless(&pn->ctrlreq_queue)) |
344 | mask |= EPOLLPRI; | 344 | mask |= EPOLLPRI; |
345 | if (!mask && sk->sk_state == TCP_CLOSE_WAIT) | 345 | if (!mask && sk->sk_state == TCP_CLOSE_WAIT) |
346 | return EPOLLHUP; | 346 | return EPOLLHUP; |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 5ca0ec0e823c..cfb25391b8b0 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
@@ -8476,7 +8476,7 @@ __poll_t sctp_poll(struct file *file, struct socket *sock, poll_table *wait) | |||
8476 | mask = 0; | 8476 | mask = 0; |
8477 | 8477 | ||
8478 | /* Is there any exceptional events? */ | 8478 | /* Is there any exceptional events? */ |
8479 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) | 8479 | if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) |
8480 | mask |= EPOLLERR | | 8480 | mask |= EPOLLERR | |
8481 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); | 8481 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); |
8482 | if (sk->sk_shutdown & RCV_SHUTDOWN) | 8482 | if (sk->sk_shutdown & RCV_SHUTDOWN) |
@@ -8485,7 +8485,7 @@ __poll_t sctp_poll(struct file *file, struct socket *sock, poll_table *wait) | |||
8485 | mask |= EPOLLHUP; | 8485 | mask |= EPOLLHUP; |
8486 | 8486 | ||
8487 | /* Is it readable? Reconsider this code with TCP-style support. */ | 8487 | /* Is it readable? Reconsider this code with TCP-style support. */ |
8488 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 8488 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
8489 | mask |= EPOLLIN | EPOLLRDNORM; | 8489 | mask |= EPOLLIN | EPOLLRDNORM; |
8490 | 8490 | ||
8491 | /* The association is either gone or not ready. */ | 8491 | /* The association is either gone or not ready. */ |
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index f8bbc4aab213..4b92b196cfa6 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -740,7 +740,7 @@ static __poll_t tipc_poll(struct file *file, struct socket *sock, | |||
740 | /* fall through */ | 740 | /* fall through */ |
741 | case TIPC_LISTEN: | 741 | case TIPC_LISTEN: |
742 | case TIPC_CONNECTING: | 742 | case TIPC_CONNECTING: |
743 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 743 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
744 | revents |= EPOLLIN | EPOLLRDNORM; | 744 | revents |= EPOLLIN | EPOLLRDNORM; |
745 | break; | 745 | break; |
746 | case TIPC_OPEN: | 746 | case TIPC_OPEN: |
@@ -748,7 +748,7 @@ static __poll_t tipc_poll(struct file *file, struct socket *sock, | |||
748 | revents |= EPOLLOUT; | 748 | revents |= EPOLLOUT; |
749 | if (!tipc_sk_type_connectionless(sk)) | 749 | if (!tipc_sk_type_connectionless(sk)) |
750 | break; | 750 | break; |
751 | if (skb_queue_empty(&sk->sk_receive_queue)) | 751 | if (skb_queue_empty_lockless(&sk->sk_receive_queue)) |
752 | break; | 752 | break; |
753 | revents |= EPOLLIN | EPOLLRDNORM; | 753 | revents |= EPOLLIN | EPOLLRDNORM; |
754 | break; | 754 | break; |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 67e87db5877f..0d8da809bea2 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -2599,7 +2599,7 @@ static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wa | |||
2599 | mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM; | 2599 | mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM; |
2600 | 2600 | ||
2601 | /* readable? */ | 2601 | /* readable? */ |
2602 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 2602 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
2603 | mask |= EPOLLIN | EPOLLRDNORM; | 2603 | mask |= EPOLLIN | EPOLLRDNORM; |
2604 | 2604 | ||
2605 | /* Connection-based need to check for termination and startup */ | 2605 | /* Connection-based need to check for termination and startup */ |
@@ -2628,7 +2628,7 @@ static __poll_t unix_dgram_poll(struct file *file, struct socket *sock, | |||
2628 | mask = 0; | 2628 | mask = 0; |
2629 | 2629 | ||
2630 | /* exceptional events? */ | 2630 | /* exceptional events? */ |
2631 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) | 2631 | if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) |
2632 | mask |= EPOLLERR | | 2632 | mask |= EPOLLERR | |
2633 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); | 2633 | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); |
2634 | 2634 | ||
@@ -2638,7 +2638,7 @@ static __poll_t unix_dgram_poll(struct file *file, struct socket *sock, | |||
2638 | mask |= EPOLLHUP; | 2638 | mask |= EPOLLHUP; |
2639 | 2639 | ||
2640 | /* readable? */ | 2640 | /* readable? */ |
2641 | if (!skb_queue_empty(&sk->sk_receive_queue)) | 2641 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) |
2642 | mask |= EPOLLIN | EPOLLRDNORM; | 2642 | mask |= EPOLLIN | EPOLLRDNORM; |
2643 | 2643 | ||
2644 | /* Connection-based need to check for termination and startup */ | 2644 | /* Connection-based need to check for termination and startup */ |
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 2ab43b2bba31..582a3e4dfce2 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c | |||
@@ -870,7 +870,7 @@ static __poll_t vsock_poll(struct file *file, struct socket *sock, | |||
870 | * the queue and write as long as the socket isn't shutdown for | 870 | * the queue and write as long as the socket isn't shutdown for |
871 | * sending. | 871 | * sending. |
872 | */ | 872 | */ |
873 | if (!skb_queue_empty(&sk->sk_receive_queue) || | 873 | if (!skb_queue_empty_lockless(&sk->sk_receive_queue) || |
874 | (sk->sk_shutdown & RCV_SHUTDOWN)) { | 874 | (sk->sk_shutdown & RCV_SHUTDOWN)) { |
875 | mask |= EPOLLIN | EPOLLRDNORM; | 875 | mask |= EPOLLIN | EPOLLRDNORM; |
876 | } | 876 | } |