mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
net: use new in_dev_ifa iterators
Use in_dev_for_each_ifa_rcu/rtnl instead. This prevents sparse warnings once proper __rcu annotations are added. Signed-off-by: Florian Westphal <fw@strlen.de> t di# Last commands done (6 commands done): Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b8d1957236
commit
cd5a411dba
5 changed files with 29 additions and 17 deletions
|
@ -540,14 +540,22 @@ static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt,
|
|||
cfg->fc_oif = dev->ifindex;
|
||||
cfg->fc_table = l3mdev_fib_table(dev);
|
||||
if (colon) {
|
||||
struct in_ifaddr *ifa;
|
||||
struct in_device *in_dev = __in_dev_get_rtnl(dev);
|
||||
const struct in_ifaddr *ifa;
|
||||
struct in_device *in_dev;
|
||||
|
||||
in_dev = __in_dev_get_rtnl(dev);
|
||||
if (!in_dev)
|
||||
return -ENODEV;
|
||||
|
||||
*colon = ':';
|
||||
for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next)
|
||||
|
||||
rcu_read_lock();
|
||||
in_dev_for_each_ifa_rcu(ifa, in_dev) {
|
||||
if (strcmp(ifa->ifa_label, devname) == 0)
|
||||
break;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
if (!ifa)
|
||||
return -ENODEV;
|
||||
cfg->fc_prefsrc = ifa->ifa_local;
|
||||
|
@ -1177,8 +1185,8 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim)
|
|||
*
|
||||
* Scan address list to be sure that addresses are really gone.
|
||||
*/
|
||||
|
||||
for (ifa1 = in_dev->ifa_list; ifa1; ifa1 = ifa1->ifa_next) {
|
||||
rcu_read_lock();
|
||||
in_dev_for_each_ifa_rcu(ifa1, in_dev) {
|
||||
if (ifa1 == ifa) {
|
||||
/* promotion, keep the IP */
|
||||
gone = 0;
|
||||
|
@ -1246,6 +1254,7 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim)
|
|||
}
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
no_promotions:
|
||||
if (!(ok & BRD_OK))
|
||||
|
@ -1415,6 +1424,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
|
|||
struct netdev_notifier_info_ext *info_ext = ptr;
|
||||
struct in_device *in_dev;
|
||||
struct net *net = dev_net(dev);
|
||||
struct in_ifaddr *ifa;
|
||||
unsigned int flags;
|
||||
|
||||
if (event == NETDEV_UNREGISTER) {
|
||||
|
@ -1429,9 +1439,9 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
|
|||
|
||||
switch (event) {
|
||||
case NETDEV_UP:
|
||||
for_ifa(in_dev) {
|
||||
in_dev_for_each_ifa_rtnl(ifa, in_dev) {
|
||||
fib_add_ifaddr(ifa);
|
||||
} endfor_ifa(in_dev);
|
||||
}
|
||||
#ifdef CONFIG_IP_ROUTE_MULTIPATH
|
||||
fib_sync_up(dev, RTNH_F_DEAD);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue