diff options
author | Ben Pfaff <blp@nicira.com> | 2009-08-05 12:51:30 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2009-08-06 16:57:06 -0700 |
commit | 2e7dd8eca88d131112a76301da24709b0472e381 (patch) | |
tree | bb57c3a75aac8365cb7a44e0ecca780873472e95 /datapath/brcompat.c | |
parent | 3cc42ebbc144096dc56b618845519daf2d48ef6e (diff) |
datapath: Move sysfs support from brcompat_mod into openvswitch_mod.
In the past problems have arisen due to the different ways that datapaths
are created and destroyed in the three different cases:
1. sysfs supported, brcompat_mod loaded.
2. sysfs supported, brcompat_mod not loaded.
3. sysfs not supported.
The brcompat_mod loaded versus not loaded distinction is the stickiest
because we have to do all the calls into brcompat_mod through hook
functions, which in turn causes pressure to keep the number of hook
functions small and well-defined, which makes it really difficult to put
the hook call points at exactly the right place. Witness, for example,
this piece of code in datapath.c:
int dp_del_port(struct net_bridge_port *p)
{
ASSERT_RTNL();
#ifdef SUPPORT_SYSFS
if (p->port_no != ODPP_LOCAL && dp_del_if_hook)
sysfs_remove_link(&p->dp->ifobj, p->dev->name);
#endif
The code inside the #ifdef is logically part of the brcompat_mod sysfs
support, but the author of this code (quite reasonably) didn't want to
add a hook function call there. After all, what would you call the
hook function? There's no obvious name from the dp_del_port() caller's
perspective.
All this argues that sysfs support should be in openvswitch_mod itself,
since it has to be tightly integrated, not bolted on. So this commit
moves it there.
Now, this is not to say that openvswitch_mod should actually be
implementing bridge-compatible sysfs. In the future, it probably should
not be; rather, it should implement something appropriate for Open vSwitch
datapaths instead. But right now we have bridge-compatible sysfs, and so
that's what this commit moves.
Diffstat (limited to 'datapath/brcompat.c')
-rw-r--r-- | datapath/brcompat.c | 39 |
1 files changed, 0 insertions, 39 deletions
diff --git a/datapath/brcompat.c b/datapath/brcompat.c index db0a70f5..46e7f2b0 100644 --- a/datapath/brcompat.c +++ b/datapath/brcompat.c @@ -523,27 +523,6 @@ error: return ERR_PTR(error); } -int brc_add_dp(struct datapath *dp) -{ - if (!try_module_get(THIS_MODULE)) - return -ENODEV; -#ifdef SUPPORT_SYSFS - brc_sysfs_add_dp(dp); -#endif - - return 0; -} - -int brc_del_dp(struct datapath *dp) -{ -#ifdef SUPPORT_SYSFS - brc_sysfs_del_dp(dp); -#endif - module_put(THIS_MODULE); - - return 0; -} - static int __init brc_init(void) { @@ -568,16 +547,6 @@ __init brc_init(void) /* Set the openvswitch_mod device ioctl handler */ dp_ioctl_hook = brc_dev_ioctl; - /* Register hooks for datapath adds and deletes */ - dp_add_dp_hook = brc_add_dp; - dp_del_dp_hook = brc_del_dp; - - /* Register hooks for interface adds and deletes */ -#ifdef SUPPORT_SYSFS - dp_add_if_hook = brc_sysfs_add_if; - dp_del_if_hook = brc_sysfs_del_if; -#endif - /* Randomize the initial sequence number. This is not a security * feature; it only helps avoid crossed wires between userspace and * the kernel when the module is unloaded and reloaded. */ @@ -618,14 +587,6 @@ error: static void brc_cleanup(void) { - /* Unregister hooks for datapath adds and deletes */ - dp_add_dp_hook = NULL; - dp_del_dp_hook = NULL; - - /* Unregister hooks for interface adds and deletes */ - dp_add_if_hook = NULL; - dp_del_if_hook = NULL; - /* Unregister ioctl hooks */ dp_ioctl_hook = NULL; brioctl_set(NULL); |