icmp: icmp_send() can avoid a dev_put()
Subsystems (3)
PATCH 1/1 icmp: icmp_send() can avoid a dev_put()
We can avoid touching device refcount in icmp_send(), using dev_get_by_index_rcu()
Signed-off-by Eric Dumazet <[email protected]>
---
net/ipv4/icmp.c +5 -4
@@ -501,15 +501,16 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)if (!(rt->rt_flags &RTCF_LOCAL )) {struct net_device *dev =NULL ; +rcu_read_lock ();if (rt->fl.iif && net->ipv4.sysctl_icmp_errors_use_inbound_ifaddr) - dev =dev_get_by_index (net, rt->fl.iif); + dev =dev_get_by_index_rcu (net, rt->fl.iif); -if (dev) { +if (dev) saddr =inet_select_addr (dev,0 ,RT_SCOPE_LINK ); -dev_put (dev); - }else +else saddr =0 ; +rcu_read_unlock (); } tos = icmp_pointers[type].error ? ((iph->tos & IPTOS_TOS_MASK) |
From: Eric Dumazet <[email protected]>
Date: Mon, 02 Nov 2009 06:31:03 +0100
Quoted 4 lines
We can avoid touching device refcount in
icmp_send(), usingdev_get_by_index_rcu()Signed-off-by Eric Dumazet <[email protected]>
Applied.