-
- Downloads
net: add a noref bit on skb dst
Use low order bit of skb->_skb_dst to tell dst is not refcounted. Change _skb_dst to _skb_refdst to make sure all uses are catched. skb_dst() returns the dst, regardless of noref bit set or not, but with a lockdep check to make sure a noref dst is not given if current user is not rcu protected. New skb_dst_set_noref() helper to set an notrefcounted dst on a skb. (with lockdep check) skb_dst_drop() drops a reference only if skb dst was refcounted. skb_dst_force() helper is used to force a refcount on dst, when skb is queued and not anymore RCU protected. Use skb_dst_force() in __sk_add_backlog(), __dev_xmit_skb() if !IFF_XMIT_DST_RELEASE or skb enqueued on qdisc queue, in sock_queue_rcv_skb(), in __nf_queue(). Use skb_dst_force() in dev_requeue_skb(). Note: dst_use_noref() still dirties dst, we might transform it later to do one dirtying per jiffies. Signed-off-by:Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- include/linux/skbuff.h 54 additions, 4 deletionsinclude/linux/skbuff.h
- include/net/dst.h 45 additions, 3 deletionsinclude/net/dst.h
- include/net/sock.h 8 additions, 5 deletionsinclude/net/sock.h
- net/core/dev.c 3 additions, 0 deletionsnet/core/dev.c
- net/core/skbuff.c 1 addition, 1 deletionnet/core/skbuff.c
- net/core/sock.c 6 additions, 0 deletionsnet/core/sock.c
- net/ipv4/icmp.c 3 additions, 3 deletionsnet/ipv4/icmp.c
- net/ipv4/ip_options.c 5 additions, 4 deletionsnet/ipv4/ip_options.c
- net/ipv4/netfilter.c 3 additions, 3 deletionsnet/ipv4/netfilter.c
- net/ipv4/route.c 1 addition, 1 deletionnet/ipv4/route.c
- net/netfilter/nf_queue.c 2 additions, 0 deletionsnet/netfilter/nf_queue.c
- net/sched/sch_generic.c 3 additions, 1 deletionnet/sched/sch_generic.c
Loading
Please register or sign in to comment