diff options
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/bus.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 472810f8e6e..253868e03c7 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
@@ -324,27 +324,25 @@ int bus_for_each_drv(struct bus_type * bus, struct device_driver * start, | |||
324 | return error; | 324 | return error; |
325 | } | 325 | } |
326 | 326 | ||
327 | static int device_add_attrs(struct bus_type * bus, struct device * dev) | 327 | static int device_add_attrs(struct bus_type *bus, struct device *dev) |
328 | { | 328 | { |
329 | int error = 0; | 329 | int error = 0; |
330 | int i; | 330 | int i; |
331 | 331 | ||
332 | if (bus->dev_attrs) { | 332 | if (!bus->dev_attrs) |
333 | for (i = 0; attr_name(bus->dev_attrs[i]); i++) { | 333 | return 0; |
334 | error = device_create_file(dev,&bus->dev_attrs[i]); | 334 | |
335 | if (error) | 335 | for (i = 0; attr_name(bus->dev_attrs[i]); i++) { |
336 | goto Err; | 336 | error = device_create_file(dev,&bus->dev_attrs[i]); |
337 | if (error) { | ||
338 | while (--i >= 0) | ||
339 | device_remove_file(dev, &bus->dev_attrs[i]); | ||
340 | break; | ||
337 | } | 341 | } |
338 | } | 342 | } |
339 | Done: | ||
340 | return error; | 343 | return error; |
341 | Err: | ||
342 | while (--i >= 0) | ||
343 | device_remove_file(dev,&bus->dev_attrs[i]); | ||
344 | goto Done; | ||
345 | } | 344 | } |
346 | 345 | ||
347 | |||
348 | static void device_remove_attrs(struct bus_type * bus, struct device * dev) | 346 | static void device_remove_attrs(struct bus_type * bus, struct device * dev) |
349 | { | 347 | { |
350 | int i; | 348 | int i; |