diff options
Diffstat (limited to 'net/bridge/br_sysfs_if.c')
-rw-r--r-- | net/bridge/br_sysfs_if.c | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/net/bridge/br_sysfs_if.c b/net/bridge/br_sysfs_if.c index 0b9916489d6b..fd5799c9bc8d 100644 --- a/net/bridge/br_sysfs_if.c +++ b/net/bridge/br_sysfs_if.c | |||
@@ -246,7 +246,7 @@ const struct sysfs_ops brport_sysfs_ops = { | |||
246 | /* | 246 | /* |
247 | * Add sysfs entries to ethernet device added to a bridge. | 247 | * Add sysfs entries to ethernet device added to a bridge. |
248 | * Creates a brport subdirectory with bridge attributes. | 248 | * Creates a brport subdirectory with bridge attributes. |
249 | * Puts symlink in bridge's brport subdirectory | 249 | * Puts symlink in bridge's brif subdirectory |
250 | */ | 250 | */ |
251 | int br_sysfs_addif(struct net_bridge_port *p) | 251 | int br_sysfs_addif(struct net_bridge_port *p) |
252 | { | 252 | { |
@@ -257,15 +257,37 @@ int br_sysfs_addif(struct net_bridge_port *p) | |||
257 | err = sysfs_create_link(&p->kobj, &br->dev->dev.kobj, | 257 | err = sysfs_create_link(&p->kobj, &br->dev->dev.kobj, |
258 | SYSFS_BRIDGE_PORT_LINK); | 258 | SYSFS_BRIDGE_PORT_LINK); |
259 | if (err) | 259 | if (err) |
260 | goto out2; | 260 | return err; |
261 | 261 | ||
262 | for (a = brport_attrs; *a; ++a) { | 262 | for (a = brport_attrs; *a; ++a) { |
263 | err = sysfs_create_file(&p->kobj, &((*a)->attr)); | 263 | err = sysfs_create_file(&p->kobj, &((*a)->attr)); |
264 | if (err) | 264 | if (err) |
265 | goto out2; | 265 | return err; |
266 | } | 266 | } |
267 | 267 | ||
268 | err = sysfs_create_link(br->ifobj, &p->kobj, p->dev->name); | 268 | strlcpy(p->sysfs_name, p->dev->name, IFNAMSIZ); |
269 | out2: | 269 | return sysfs_create_link(br->ifobj, &p->kobj, p->sysfs_name); |
270 | } | ||
271 | |||
272 | /* Rename bridge's brif symlink */ | ||
273 | int br_sysfs_renameif(struct net_bridge_port *p) | ||
274 | { | ||
275 | struct net_bridge *br = p->br; | ||
276 | int err; | ||
277 | |||
278 | /* If a rename fails, the rollback will cause another | ||
279 | * rename call with the existing name. | ||
280 | */ | ||
281 | if (!strncmp(p->sysfs_name, p->dev->name, IFNAMSIZ)) | ||
282 | return 0; | ||
283 | |||
284 | err = sysfs_rename_link(br->ifobj, &p->kobj, | ||
285 | p->sysfs_name, p->dev->name); | ||
286 | if (err) | ||
287 | netdev_notice(br->dev, "unable to rename link %s to %s", | ||
288 | p->sysfs_name, p->dev->name); | ||
289 | else | ||
290 | strlcpy(p->sysfs_name, p->dev->name, IFNAMSIZ); | ||
291 | |||
270 | return err; | 292 | return err; |
271 | } | 293 | } |