From: Eric Dumazet Date: Wed, 26 Nov 2008 09:08:18 +0000 (-0800) Subject: net: release skb->dst in sock_queue_rcv_skb() X-Git-Tag: v2.6.29-rc1~581^2~386 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=70355602879229c6f8bd694ec9c0814222bc4936;p=~shefty%2Frdma-dev.git net: release skb->dst in sock_queue_rcv_skb() When queuing a skb to sk->sk_receive_queue, we can release its dst, not anymore needed. Since current cpu did the dst_hold(), refcount is probably still hot int this cpu caches. This avoids readers to access the original dst to decrement its refcount, possibly a long time after packet reception. This should speedup UDP and RAW receive path. Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller --- diff --git a/net/core/sock.c b/net/core/sock.c index 7a081b647bf..b28764558a7 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -289,7 +289,11 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) skb->dev = NULL; skb_set_owner_r(skb, sk); - + /* + * release dst right now while its hot + */ + dst_release(skb->dst); + skb->dst = NULL; /* Cache the SKB length before we tack it onto the receive * queue. Once it is added it no longer belongs to us and * may be freed by other threads of control pulling packets