rbd: fix cleanup when trying to mount inexistent image
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 7 Jan 2011 22:58:42 +0000 (14:58 -0800)
committerSage Weil <sage@newdream.net>
Wed, 12 Jan 2011 23:15:18 +0000 (15:15 -0800)
Previously we didn't clean up the sysfs entry that was just
created.

Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: Sage Weil <sage@newdream.net>
drivers/block/rbd.c

index 008d4a00b50df57f529528b1b2eefec9b379a544..e1e38b11f48ae3b60f15a27f0242b4b9c100dde5 100644 (file)
@@ -1790,18 +1790,29 @@ static ssize_t rbd_add(struct bus_type *bus, const char *buf, size_t count)
 
        rc = rbd_bus_add_dev(rbd_dev);
        if (rc)
-               goto err_out_disk;
+               goto err_out_blkdev;
+
        /* set up and announce blkdev mapping */
        rc = rbd_init_disk(rbd_dev);
        if (rc)
-               goto err_out_blkdev;
+               goto err_out_bus;
 
        return count;
 
+err_out_bus:
+       mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
+       list_del_init(&rbd_dev->node);
+       mutex_unlock(&ctl_mutex);
+
+       /* this will also clean up rest of rbd_dev stuff */
+
+       rbd_bus_del_dev(rbd_dev);
+       kfree(options);
+       kfree(mon_dev_name);
+       return rc;
+
 err_out_blkdev:
        unregister_blkdev(rbd_dev->major, rbd_dev->name);
-err_out_disk:
-       rbd_free_disk(rbd_dev);
 err_out_client:
        rbd_put_client(rbd_dev);
        mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);