]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
net/packet: constify __packet_rcv_has_room()
authorEric Dumazet <edumazet@google.com>
Wed, 12 Jun 2019 16:52:29 +0000 (09:52 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 15 Jun 2019 01:52:14 +0000 (18:52 -0700)
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>
net/packet/af_packet.c

index 5ef63d0c3ad0a184a03429fdd52cad26349647d1..a0564855ed9dca4be37f70ed81c6dee1b38aca39 100644 (file)
@@ -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;