diff options
author | Simon Arlott <simon@fire.lp0.eu> | 2010-05-10 09:31:11 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-05-15 23:10:15 -0700 |
commit | e0f43752a942b7be1bc06b9fd74e20ae337c1cca (patch) | |
tree | 892d0fbc2ecae39f2e5c4a7b711cbb988c8dc3f1 /net/bridge/br_private.h | |
parent | 28a16c97963d3bc36a2c192859f6d8025ef2967a (diff) | |
download | linux-3.10-e0f43752a942b7be1bc06b9fd74e20ae337c1cca.tar.gz linux-3.10-e0f43752a942b7be1bc06b9fd74e20ae337c1cca.tar.bz2 linux-3.10-e0f43752a942b7be1bc06b9fd74e20ae337c1cca.zip |
bridge: update sysfs link names if port device names have changed
Links for each port are created in sysfs using the device
name, but this could be changed after being added to the
bridge.
As well as being unable to remove interfaces after this
occurs (because userspace tools don't recognise the new
name, and the kernel won't recognise the old name), adding
another interface with the old name to the bridge will
cause an error trying to create the sysfs link.
This fixes the problem by listening for NETDEV_CHANGENAME
notifications and renaming the link.
https://bugzilla.kernel.org/show_bug.cgi?id=12743
Signed-off-by: Simon Arlott <simon@fire.lp0.eu>
Acked-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_private.h')
-rw-r--r-- | net/bridge/br_private.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 79a13d1c257..0f4a74bc6a9 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -139,6 +139,10 @@ struct net_bridge_port struct hlist_head mglist; struct hlist_node rlist; #endif + +#ifdef CONFIG_SYSFS + char sysfs_name[IFNAMSIZ]; +#endif }; struct br_cpu_netstats { @@ -480,6 +484,7 @@ extern void br_ifinfo_notify(int event, struct net_bridge_port *port); /* br_sysfs_if.c */ extern const struct sysfs_ops brport_sysfs_ops; extern int br_sysfs_addif(struct net_bridge_port *p); +extern int br_sysfs_renameif(struct net_bridge_port *p); /* br_sysfs_br.c */ extern int br_sysfs_addbr(struct net_device *dev); @@ -488,6 +493,7 @@ extern void br_sysfs_delbr(struct net_device *dev); #else #define br_sysfs_addif(p) (0) +#define br_sysfs_renameif(p) (0) #define br_sysfs_addbr(dev) (0) #define br_sysfs_delbr(dev) do { } while(0) #endif /* CONFIG_SYSFS */ |