Message ID | m1fxmni9uv.fsf_-_@frodo.ebiederm.org |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: ebiederm@xmission.com (Eric W. Biederman) Date: Thu, 23 Oct 2008 08:56:08 -0700 > To make testing of the network namespace simpler allow > the network namespace code and the sysfs code to be > compiled and run at the same time. To do this only > virtual devices are allowed in the additional network > namespaces and those virtual devices are not placed > in the kobject tree. > > Since virtual devices don't actually do anything interesting > hardware wise that needs device management there should > be no loss in keeping them out of the kobject tree and > by implication sysfs. The gain in ease of testing > and code coverage should be significant. > > Changelog: > > v2: As pointed out by Benjamin Thery it only makes sense to call > device_rename in the initial network namespace for now. > > Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> > Acked-by: Benjamin Thery <benjamin.thery@bull.net> > Tested-by: Serge Hallyn <serue@us.ibm.com> > Acked-by: Serge Hallyn <serue@us.ibm.com> > Acked-by: Daniel Lezcano <dlezcano@fr.ibm.com> So let's figure out what happens with this patch. I'm personally ok with the change, the question is when and where. My net-2.6 tree was closed to new features long ago, so I really don't want to try to merge this sucker into 2.6.28-rcX :-) But if you guys think that is prudent, feel free to submit it directly to Linus and add my signoff: Signed-off-by: David S. Miller <davem@davemloft.net> otherwise if we shoot for 2.6.29 I would suggest that we wait until the merge window to see if the sysfs issues get sorted, and if not we slip this patch into to tree instead. Let me know what you guys plan to do with this. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
David Miller <davem@davemloft.net> writes: > From: ebiederm@xmission.com (Eric W. Biederman) > Date: Thu, 23 Oct 2008 08:56:08 -0700 > >> To make testing of the network namespace simpler allow >> the network namespace code and the sysfs code to be >> compiled and run at the same time. To do this only >> virtual devices are allowed in the additional network >> namespaces and those virtual devices are not placed >> in the kobject tree. >> >> Since virtual devices don't actually do anything interesting >> hardware wise that needs device management there should >> be no loss in keeping them out of the kobject tree and >> by implication sysfs. The gain in ease of testing >> and code coverage should be significant. >> >> Changelog: >> >> v2: As pointed out by Benjamin Thery it only makes sense to call >> device_rename in the initial network namespace for now. >> >> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> >> Acked-by: Benjamin Thery <benjamin.thery@bull.net> >> Tested-by: Serge Hallyn <serue@us.ibm.com> >> Acked-by: Serge Hallyn <serue@us.ibm.com> >> Acked-by: Daniel Lezcano <dlezcano@fr.ibm.com> > > So let's figure out what happens with this patch. > I'm personally ok with the change, the question is when > and where. > > My net-2.6 tree was closed to new features long ago, so I really > don't want to try to merge this sucker into 2.6.28-rcX :-) But if > you guys think that is prudent, feel free to submit it directly to > Linus and add my signoff: > > Signed-off-by: David S. Miller <davem@davemloft.net> > > otherwise if we shoot for 2.6.29 I would suggest that we wait until > the merge window to see if the sysfs issues get sorted, and if not > we slip this patch into to tree instead. > > Let me know what you guys plan to do with this. What I was thinking is that it goes into your tree for 2.6.29. Allowing for better test coverage in the short term, and removing the pressure to do a hack job on sysfs just to reduce the pain of testing. The patch was sent during the merge window just because that is when the conversation was happening. I guess the pain with sysfs is having multiple patches in different trees in this area causing conflicts in linux-next. Ugh. I can see why you would want to hold back. On the contrary point of view we need that patch in someones tree or else we might as well merge it now, if the plan is to merge it without it sitting in anyone's development tree. So my plan is I'm not going to worry about that patch, and leave it to Ben and Daniel (if it needs a retransmit). If it happens to merge into net-next and that causes conflicts when we do a good job on sysfs I will handle it. Eric -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: ebiederm@xmission.com (Eric W. Biederman) Date: Mon, 27 Oct 2008 13:19:27 -0700 > What I was thinking is that it goes into your tree for 2.6.29. Allowing > for better test coverage in the short term, and removing the pressure > to do a hack job on sysfs just to reduce the pain of testing. Fair enough. I'll add it to my tree. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/Kconfig b/net/Kconfig index d789d79..8c3d97c 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -27,7 +27,7 @@ menu "Networking options" config NET_NS bool "Network namespace support" default n - depends on EXPERIMENTAL && !SYSFS && NAMESPACES + depends on EXPERIMENTAL && NAMESPACES help Allow user space to create what appear to be multiple instances of the network stack. diff --git a/net/core/dev.c b/net/core/dev.c index b8a4fd0..0e38594 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -924,10 +924,15 @@ int dev_change_name(struct net_device *dev, const char *newname) strlcpy(dev->name, newname, IFNAMSIZ); rollback: - ret = device_rename(&dev->dev, dev->name); - if (ret) { - memcpy(dev->name, oldname, IFNAMSIZ); - return ret; + /* For now only devices in the initial network namespace + * are in sysfs. + */ + if (net == &init_net) { + ret = device_rename(&dev->dev, dev->name); + if (ret) { + memcpy(dev->name, oldname, IFNAMSIZ); + return ret; + } } write_lock_bh(&dev_base_lock); @@ -4449,6 +4454,15 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char if (dev->features & NETIF_F_NETNS_LOCAL) goto out; +#ifdef CONFIG_SYSFS + /* Don't allow real devices to be moved when sysfs + * is enabled. + */ + err = -EINVAL; + if (dev->dev.parent) + goto out; +#endif + /* Ensure the device has been registrered */ err = -EINVAL; if (dev->reg_state != NETREG_REGISTERED) @@ -4506,6 +4520,8 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char */ dev_addr_discard(dev); + netdev_unregister_kobject(dev); + /* Actually switch the network namespace */ dev_net_set(dev, net); @@ -4522,7 +4538,6 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char } /* Fixup kobjects */ - netdev_unregister_kobject(dev); err = netdev_register_kobject(dev); WARN_ON(err); diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 92d6b94..85cb8bd 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -476,6 +476,10 @@ void netdev_unregister_kobject(struct net_device * net) struct device *dev = &(net->dev); kobject_get(&dev->kobj); + + if (dev_net(net) != &init_net) + return; + device_del(dev); } @@ -501,6 +505,9 @@ int netdev_register_kobject(struct net_device *net) #endif #endif /* CONFIG_SYSFS */ + if (dev_net(net) != &init_net) + return 0; + return device_add(dev); }