aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2019-10-24 01:44:50 -0400
committerDavid S. Miller <davem@davemloft.net>2019-10-28 16:33:41 -0400
commit3ef7cf57c72f32f61e97f8fa401bc39ea1f1a5d4 (patch)
tree7f962942a142ed611e6c063171ef0092f8af8fd8
parent137a0dbe3426fd7bcfe3f8117b36a87b3590e4eb (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.c2
-rw-r--r--net/atm/common.c2
-rw-r--r--net/bluetooth/af_bluetooth.c4
-rw-r--r--net/caif/caif_socket.c2
-rw-r--r--net/core/datagram.c4
-rw-r--r--net/decnet/af_decnet.c2
-rw-r--r--net/ipv4/tcp.c2
-rw-r--r--net/ipv4/udp.c2
-rw-r--r--net/nfc/llcp_sock.c4
-rw-r--r--net/phonet/socket.c4
-rw-r--r--net/sctp/socket.c4
-rw-r--r--net/tipc/socket.c4
-rw-r--r--net/unix/af_unix.c6
-rw-r--r--net/vmw_vsock/af_vsock.c2
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 }