[NET]: Rework dev_base via list_head (v3)
Cleanup of dev_base list use, with the aim to simplify making device list per-namespace. In almost every occasion, use of dev_base variable and dev->next pointer could be easily replaced by for_each_netdev loop. A few most complicated places were converted to using first_netdev()/next_netdev(). Signed-off-by: Pavel Emelianov <xemul@openvz.org> Acked-by: Kirill Korotaev <dev@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
03fba04796
commit
7562f876cd
@@ -886,7 +886,7 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old
|
||||
.iif = loopback_dev.ifindex,
|
||||
.oif = oldflp->oif };
|
||||
struct dn_route *rt = NULL;
|
||||
struct net_device *dev_out = NULL;
|
||||
struct net_device *dev_out = NULL, *dev;
|
||||
struct neighbour *neigh = NULL;
|
||||
unsigned hash;
|
||||
unsigned flags = 0;
|
||||
@@ -925,15 +925,17 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old
|
||||
goto out;
|
||||
}
|
||||
read_lock(&dev_base_lock);
|
||||
for(dev_out = dev_base; dev_out; dev_out = dev_out->next) {
|
||||
if (!dev_out->dn_ptr)
|
||||
for_each_netdev(dev) {
|
||||
if (!dev->dn_ptr)
|
||||
continue;
|
||||
if (!dn_dev_islocal(dev_out, oldflp->fld_src))
|
||||
if (!dn_dev_islocal(dev, oldflp->fld_src))
|
||||
continue;
|
||||
if ((dev_out->flags & IFF_LOOPBACK) &&
|
||||
if ((dev->flags & IFF_LOOPBACK) &&
|
||||
oldflp->fld_dst &&
|
||||
!dn_dev_islocal(dev_out, oldflp->fld_dst))
|
||||
!dn_dev_islocal(dev, oldflp->fld_dst))
|
||||
continue;
|
||||
|
||||
dev_out = dev;
|
||||
break;
|
||||
}
|
||||
read_unlock(&dev_base_lock);
|
||||
|
Reference in New Issue
Block a user