Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/tokenring/tmspci.c drivers/net/ucc_geth_mii.c
This commit is contained in:
@@ -493,15 +493,17 @@ static void addrconf_forward_change(struct net *net, __s32 newf)
|
||||
read_unlock(&dev_base_lock);
|
||||
}
|
||||
|
||||
static void addrconf_fixup_forwarding(struct ctl_table *table, int *p, int old)
|
||||
static int addrconf_fixup_forwarding(struct ctl_table *table, int *p, int old)
|
||||
{
|
||||
struct net *net;
|
||||
|
||||
net = (struct net *)table->extra2;
|
||||
if (p == &net->ipv6.devconf_dflt->forwarding)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (!rtnl_trylock())
|
||||
return -ERESTARTSYS;
|
||||
|
||||
rtnl_lock();
|
||||
if (p == &net->ipv6.devconf_all->forwarding) {
|
||||
__s32 newf = net->ipv6.devconf_all->forwarding;
|
||||
net->ipv6.devconf_dflt->forwarding = newf;
|
||||
@@ -512,6 +514,7 @@ static void addrconf_fixup_forwarding(struct ctl_table *table, int *p, int old)
|
||||
|
||||
if (*p)
|
||||
rt6_purge_dflt_routers(net);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2599,9 +2602,6 @@ static int addrconf_ifdown(struct net_device *dev, int how)
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
if ((dev->flags & IFF_LOOPBACK) && how == 1)
|
||||
how = 0;
|
||||
|
||||
rt6_ifdown(net, dev);
|
||||
neigh_ifdown(&nd_tbl, dev);
|
||||
|
||||
@@ -3977,7 +3977,7 @@ int addrconf_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
|
||||
ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
|
||||
|
||||
if (write)
|
||||
addrconf_fixup_forwarding(ctl, valp, val);
|
||||
ret = addrconf_fixup_forwarding(ctl, valp, val);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -4013,8 +4013,7 @@ static int addrconf_sysctl_forward_strategy(ctl_table *table,
|
||||
}
|
||||
|
||||
*valp = new;
|
||||
addrconf_fixup_forwarding(table, valp, val);
|
||||
return 1;
|
||||
return addrconf_fixup_forwarding(table, valp, val);
|
||||
}
|
||||
|
||||
static struct addrconf_sysctl_table
|
||||
@@ -4440,25 +4439,6 @@ int unregister_inet6addr_notifier(struct notifier_block *nb)
|
||||
|
||||
EXPORT_SYMBOL(unregister_inet6addr_notifier);
|
||||
|
||||
static void addrconf_net_exit(struct net *net)
|
||||
{
|
||||
struct net_device *dev;
|
||||
|
||||
rtnl_lock();
|
||||
/* clean dev list */
|
||||
for_each_netdev(net, dev) {
|
||||
if (__in6_dev_get(dev) == NULL)
|
||||
continue;
|
||||
addrconf_ifdown(dev, 1);
|
||||
}
|
||||
addrconf_ifdown(net->loopback_dev, 2);
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
static struct pernet_operations addrconf_net_ops = {
|
||||
.exit = addrconf_net_exit,
|
||||
};
|
||||
|
||||
/*
|
||||
* Init / cleanup code
|
||||
*/
|
||||
@@ -4500,10 +4480,6 @@ int __init addrconf_init(void)
|
||||
if (err)
|
||||
goto errlo;
|
||||
|
||||
err = register_pernet_device(&addrconf_net_ops);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
register_netdevice_notifier(&ipv6_dev_notf);
|
||||
|
||||
addrconf_verify(0);
|
||||
@@ -4533,15 +4509,22 @@ errlo:
|
||||
void addrconf_cleanup(void)
|
||||
{
|
||||
struct inet6_ifaddr *ifa;
|
||||
struct net_device *dev;
|
||||
int i;
|
||||
|
||||
unregister_netdevice_notifier(&ipv6_dev_notf);
|
||||
unregister_pernet_device(&addrconf_net_ops);
|
||||
|
||||
unregister_pernet_subsys(&addrconf_ops);
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
/* clean dev list */
|
||||
for_each_netdev(&init_net, dev) {
|
||||
if (__in6_dev_get(dev) == NULL)
|
||||
continue;
|
||||
addrconf_ifdown(dev, 1);
|
||||
}
|
||||
addrconf_ifdown(init_net.loopback_dev, 2);
|
||||
|
||||
/*
|
||||
* Check hash table.
|
||||
*/
|
||||
@@ -4562,6 +4545,4 @@ void addrconf_cleanup(void)
|
||||
|
||||
del_timer(&addr_chk_timer);
|
||||
rtnl_unlock();
|
||||
|
||||
unregister_pernet_subsys(&addrconf_net_ops);
|
||||
}
|
||||
|
Reference in New Issue
Block a user