diff options
author | Eric Dumazet <edumazet@google.com> | 2019-06-12 19:52:29 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-06-15 04:52:14 +0300 |
commit | 0338a14523e3864524dafb6a66c7b82e94201317 (patch) | |
tree | 7fd96784350d56925a0151eb680baa94b8107d08 /net | |
parent | dcf70cefaf99a40cfa25face160f29c1cf3bf84d (diff) | |
download | linux-0338a14523e3864524dafb6a66c7b82e94201317.tar.xz |
net/packet: constify __packet_rcv_has_room()
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/packet/af_packet.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 5ef63d0c3ad0..a0564855ed9d 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1224,15 +1224,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; |