Skip to content

Commit 3ef7cf5

Browse files
edumazetdavem330
authored andcommitted
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 137a0db commit 3ef7cf5

File tree

14 files changed

+22
-22
lines changed

14 files changed

+22
-22
lines changed

drivers/isdn/capi/capi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,7 @@ capi_poll(struct file *file, poll_table *wait)
744744

745745
poll_wait(file, &(cdev->recvwait), wait);
746746
mask = EPOLLOUT | EPOLLWRNORM;
747-
if (!skb_queue_empty(&cdev->recvqueue))
747+
if (!skb_queue_empty_lockless(&cdev->recvqueue))
748748
mask |= EPOLLIN | EPOLLRDNORM;
749749
return mask;
750750
}

net/atm/common.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ __poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
668668
mask |= EPOLLHUP;
669669

670670
/* readable? */
671-
if (!skb_queue_empty(&sk->sk_receive_queue))
671+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
672672
mask |= EPOLLIN | EPOLLRDNORM;
673673

674674
/* writable? */

net/bluetooth/af_bluetooth.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ __poll_t bt_sock_poll(struct file *file, struct socket *sock,
460460
if (sk->sk_state == BT_LISTEN)
461461
return bt_accept_poll(sk);
462462

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))
464464
mask |= EPOLLERR |
465465
(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
466466

@@ -470,7 +470,7 @@ __poll_t bt_sock_poll(struct file *file, struct socket *sock,
470470
if (sk->sk_shutdown == SHUTDOWN_MASK)
471471
mask |= EPOLLHUP;
472472

473-
if (!skb_queue_empty(&sk->sk_receive_queue))
473+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
474474
mask |= EPOLLIN | EPOLLRDNORM;
475475

476476
if (sk->sk_state == BT_CLOSED)

net/caif/caif_socket.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -953,7 +953,7 @@ static __poll_t caif_poll(struct file *file,
953953
mask |= EPOLLRDHUP;
954954

955955
/* readable? */
956-
if (!skb_queue_empty(&sk->sk_receive_queue) ||
956+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue) ||
957957
(sk->sk_shutdown & RCV_SHUTDOWN))
958958
mask |= EPOLLIN | EPOLLRDNORM;
959959

net/core/datagram.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ __poll_t datagram_poll(struct file *file, struct socket *sock,
767767
mask = 0;
768768

769769
/* 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))
771771
mask |= EPOLLERR |
772772
(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
773773

@@ -777,7 +777,7 @@ __poll_t datagram_poll(struct file *file, struct socket *sock,
777777
mask |= EPOLLHUP;
778778

779779
/* readable? */
780-
if (!skb_queue_empty(&sk->sk_receive_queue))
780+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
781781
mask |= EPOLLIN | EPOLLRDNORM;
782782

783783
/* Connection-based need to check for termination and startup */

net/decnet/af_decnet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1205,7 +1205,7 @@ static __poll_t dn_poll(struct file *file, struct socket *sock, poll_table *wai
12051205
struct dn_scp *scp = DN_SK(sk);
12061206
__poll_t mask = datagram_poll(file, sock, wait);
12071207

1208-
if (!skb_queue_empty(&scp->other_receive_queue))
1208+
if (!skb_queue_empty_lockless(&scp->other_receive_queue))
12091209
mask |= EPOLLRDBAND;
12101210

12111211
return mask;

net/ipv4/tcp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ __poll_t tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
584584
}
585585
/* This barrier is coupled with smp_wmb() in tcp_reset() */
586586
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))
588588
mask |= EPOLLERR;
589589

590590
return mask;

net/ipv4/udp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2712,7 +2712,7 @@ __poll_t udp_poll(struct file *file, struct socket *sock, poll_table *wait)
27122712
__poll_t mask = datagram_poll(file, sock, wait);
27132713
struct sock *sk = sock->sk;
27142714

2715-
if (!skb_queue_empty(&udp_sk(sk)->reader_queue))
2715+
if (!skb_queue_empty_lockless(&udp_sk(sk)->reader_queue))
27162716
mask |= EPOLLIN | EPOLLRDNORM;
27172717

27182718
/* Check for false positives due to checksum errors */

net/nfc/llcp_sock.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,11 +554,11 @@ static __poll_t llcp_sock_poll(struct file *file, struct socket *sock,
554554
if (sk->sk_state == LLCP_LISTEN)
555555
return llcp_accept_poll(sk);
556556

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))
558558
mask |= EPOLLERR |
559559
(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
560560

561-
if (!skb_queue_empty(&sk->sk_receive_queue))
561+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
562562
mask |= EPOLLIN | EPOLLRDNORM;
563563

564564
if (sk->sk_state == LLCP_CLOSED)

net/phonet/socket.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,9 +338,9 @@ static __poll_t pn_socket_poll(struct file *file, struct socket *sock,
338338

339339
if (sk->sk_state == TCP_CLOSE)
340340
return EPOLLERR;
341-
if (!skb_queue_empty(&sk->sk_receive_queue))
341+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
342342
mask |= EPOLLIN | EPOLLRDNORM;
343-
if (!skb_queue_empty(&pn->ctrlreq_queue))
343+
if (!skb_queue_empty_lockless(&pn->ctrlreq_queue))
344344
mask |= EPOLLPRI;
345345
if (!mask && sk->sk_state == TCP_CLOSE_WAIT)
346346
return EPOLLHUP;

net/sctp/socket.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8476,7 +8476,7 @@ __poll_t sctp_poll(struct file *file, struct socket *sock, poll_table *wait)
84768476
mask = 0;
84778477

84788478
/* 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))
84808480
mask |= EPOLLERR |
84818481
(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
84828482
if (sk->sk_shutdown & RCV_SHUTDOWN)
@@ -8485,7 +8485,7 @@ __poll_t sctp_poll(struct file *file, struct socket *sock, poll_table *wait)
84858485
mask |= EPOLLHUP;
84868486

84878487
/* 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))
84898489
mask |= EPOLLIN | EPOLLRDNORM;
84908490

84918491
/* The association is either gone or not ready. */

net/tipc/socket.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,15 +740,15 @@ static __poll_t tipc_poll(struct file *file, struct socket *sock,
740740
/* fall through */
741741
case TIPC_LISTEN:
742742
case TIPC_CONNECTING:
743-
if (!skb_queue_empty(&sk->sk_receive_queue))
743+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
744744
revents |= EPOLLIN | EPOLLRDNORM;
745745
break;
746746
case TIPC_OPEN:
747747
if (tsk->group_is_open && !tsk->cong_link_cnt)
748748
revents |= EPOLLOUT;
749749
if (!tipc_sk_type_connectionless(sk))
750750
break;
751-
if (skb_queue_empty(&sk->sk_receive_queue))
751+
if (skb_queue_empty_lockless(&sk->sk_receive_queue))
752752
break;
753753
revents |= EPOLLIN | EPOLLRDNORM;
754754
break;

net/unix/af_unix.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2599,7 +2599,7 @@ static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wa
25992599
mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
26002600

26012601
/* readable? */
2602-
if (!skb_queue_empty(&sk->sk_receive_queue))
2602+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
26032603
mask |= EPOLLIN | EPOLLRDNORM;
26042604

26052605
/* 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,
26282628
mask = 0;
26292629

26302630
/* 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))
26322632
mask |= EPOLLERR |
26332633
(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
26342634

@@ -2638,7 +2638,7 @@ static __poll_t unix_dgram_poll(struct file *file, struct socket *sock,
26382638
mask |= EPOLLHUP;
26392639

26402640
/* readable? */
2641-
if (!skb_queue_empty(&sk->sk_receive_queue))
2641+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
26422642
mask |= EPOLLIN | EPOLLRDNORM;
26432643

26442644
/* Connection-based need to check for termination and startup */

net/vmw_vsock/af_vsock.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,7 @@ static __poll_t vsock_poll(struct file *file, struct socket *sock,
870870
* the queue and write as long as the socket isn't shutdown for
871871
* sending.
872872
*/
873-
if (!skb_queue_empty(&sk->sk_receive_queue) ||
873+
if (!skb_queue_empty_lockless(&sk->sk_receive_queue) ||
874874
(sk->sk_shutdown & RCV_SHUTDOWN)) {
875875
mask |= EPOLLIN | EPOLLRDNORM;
876876
}

0 commit comments

Comments
 (0)