diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/rbd.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 568fa5b1206b..6bbd5af1f029 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -2421,7 +2421,12 @@ static ssize_t rbd_add(struct bus_type *bus, | |||
2421 | if (rc) | 2421 | if (rc) |
2422 | goto err_out_blkdev; | 2422 | goto err_out_blkdev; |
2423 | 2423 | ||
2424 | /* set up and announce blkdev mapping */ | 2424 | /* |
2425 | * At this point cleanup in the event of an error is the job | ||
2426 | * of the sysfs code (initiated by rbd_bus_del_dev()). | ||
2427 | * | ||
2428 | * Set up and announce blkdev mapping. | ||
2429 | */ | ||
2425 | rc = rbd_init_disk(rbd_dev); | 2430 | rc = rbd_init_disk(rbd_dev); |
2426 | if (rc) | 2431 | if (rc) |
2427 | goto err_out_bus; | 2432 | goto err_out_bus; |
@@ -2433,8 +2438,6 @@ static ssize_t rbd_add(struct bus_type *bus, | |||
2433 | return count; | 2438 | return count; |
2434 | 2439 | ||
2435 | err_out_bus: | 2440 | err_out_bus: |
2436 | rbd_id_put(rbd_dev); | ||
2437 | |||
2438 | /* this will also clean up rest of rbd_dev stuff */ | 2441 | /* this will also clean up rest of rbd_dev stuff */ |
2439 | 2442 | ||
2440 | rbd_bus_del_dev(rbd_dev); | 2443 | rbd_bus_del_dev(rbd_dev); |
@@ -2492,6 +2495,9 @@ static void rbd_dev_release(struct device *dev) | |||
2492 | /* clean up and free blkdev */ | 2495 | /* clean up and free blkdev */ |
2493 | rbd_free_disk(rbd_dev); | 2496 | rbd_free_disk(rbd_dev); |
2494 | unregister_blkdev(rbd_dev->major, rbd_dev->name); | 2497 | unregister_blkdev(rbd_dev->major, rbd_dev->name); |
2498 | |||
2499 | /* done with the id, and with the rbd_dev */ | ||
2500 | rbd_id_put(rbd_dev); | ||
2495 | kfree(rbd_dev); | 2501 | kfree(rbd_dev); |
2496 | 2502 | ||
2497 | /* release module ref */ | 2503 | /* release module ref */ |
@@ -2524,8 +2530,6 @@ static ssize_t rbd_remove(struct bus_type *bus, | |||
2524 | goto done; | 2530 | goto done; |
2525 | } | 2531 | } |
2526 | 2532 | ||
2527 | rbd_id_put(rbd_dev); | ||
2528 | |||
2529 | __rbd_remove_all_snaps(rbd_dev); | 2533 | __rbd_remove_all_snaps(rbd_dev); |
2530 | rbd_bus_del_dev(rbd_dev); | 2534 | rbd_bus_del_dev(rbd_dev); |
2531 | 2535 | ||