| From c392e9c02c14428d2754b23d753b16bf61b2a9f4 Mon Sep 17 00:00:00 2001 |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Wed, 12 Jun 2019 09:52:29 -0700 |
| Subject: [PATCH] net/packet: constify __packet_rcv_has_room() |
| |
| commit 0338a14523e3864524dafb6a66c7b82e94201317 upstream. |
| |
| Goal is use the helper without lock being held. |
| |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c |
| index 8185514e0b58..ce2c11834fa9 100644 |
| --- a/net/packet/af_packet.c |
| +++ b/net/packet/af_packet.c |
| @@ -1226,15 +1226,18 @@ static bool __tpacket_v3_has_room(const struct packet_sock *po, int pow_off) |
| return prb_lookup_block(po, &po->rx_ring, idx, TP_STATUS_KERNEL); |
| } |
| |
| -static int __packet_rcv_has_room(struct packet_sock *po, struct sk_buff *skb) |
| +static int __packet_rcv_has_room(const struct packet_sock *po, |
| + const struct sk_buff *skb) |
| { |
| - struct sock *sk = &po->sk; |
| + const struct sock *sk = &po->sk; |
| int ret = ROOM_NONE; |
| |
| if (po->prot_hook.func != tpacket_rcv) { |
| - int avail = sk->sk_rcvbuf - atomic_read(&sk->sk_rmem_alloc) |
| - - (skb ? skb->truesize : 0); |
| - if (avail > (sk->sk_rcvbuf >> ROOM_POW_OFF)) |
| + int rcvbuf = READ_ONCE(sk->sk_rcvbuf); |
| + int avail = rcvbuf - atomic_read(&sk->sk_rmem_alloc) |
| + - (skb ? skb->truesize : 0); |
| + |
| + if (avail > (rcvbuf >> ROOM_POW_OFF)) |
| return ROOM_NORMAL; |
| else if (avail > 0) |
| return ROOM_LOW; |
| -- |
| 2.27.0 |
| |