net: RCU conversion of dev_getbyhwaddr() and arp_ioctl()
Le dimanche 05 décembre 2010 à 09:19 +0100, Eric Dumazet a écrit : > Hmm.. > > If somebody can explain why RTNL is held in arp_ioctl() (and therefore > in arp_req_delete()), we might first remove RTNL use in arp_ioctl() so > that your patch can be applied. > > Right now it is not good, because RTNL wont be necessarly held when you > are going to call arp_invalidate() ? While doing this analysis, I found a refcount bug in llc, I'll send a patch for net-2.6 Meanwhile, here is the patch for net-next-2.6 Your patch then can be applied after mine. Thanks [PATCH] net: RCU conversion of dev_getbyhwaddr() and arp_ioctl() dev_getbyhwaddr() was called under RTNL. Rename it to dev_getbyhwaddr_rcu() and change all its caller to now use RCU locking instead of RTNL. Change arp_ioctl() to use RCU instead of RTNL locking. Note: this fix a dev refcount bug in llc Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a2d4b65d47
commit
941666c2e3
@@ -52,11 +52,11 @@ struct net_device *ieee802154_get_dev(struct net *net,
|
||||
|
||||
switch (addr->addr_type) {
|
||||
case IEEE802154_ADDR_LONG:
|
||||
rtnl_lock();
|
||||
dev = dev_getbyhwaddr(net, ARPHRD_IEEE802154, addr->hwaddr);
|
||||
rcu_read_lock();
|
||||
dev = dev_getbyhwaddr_rcu(net, ARPHRD_IEEE802154, addr->hwaddr);
|
||||
if (dev)
|
||||
dev_hold(dev);
|
||||
rtnl_unlock();
|
||||
rcu_read_unlock();
|
||||
break;
|
||||
case IEEE802154_ADDR_SHORT:
|
||||
if (addr->pan_id == 0xffff ||
|
||||
|
Reference in New Issue
Block a user