UBI: simplify error handling
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mon, 17 Dec 2007 13:48:49 +0000 (15:48 +0200)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Wed, 26 Dec 2007 17:15:15 +0000 (19:15 +0200)
If we fail halfway through sysfs file creation, we may just call
sysfs remove function and it will delete all the files we created.
For non-existing files it will also be OK - the remove functions
just return -ENOENT.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
drivers/mtd/ubi/build.c

index 61225f4..6ad291b 100644 (file)
@@ -159,64 +159,36 @@ static int ubi_sysfs_init(struct ubi_device *ubi)
        sprintf(&ubi->dev.bus_id[0], UBI_NAME_STR"%d", ubi->ubi_num);
        err = device_register(&ubi->dev);
        if (err)
-               goto out;
+               return err;
 
        err = device_create_file(&ubi->dev, &dev_eraseblock_size);
        if (err)
-               goto out_unregister;
+               return err;
        err = device_create_file(&ubi->dev, &dev_avail_eraseblocks);
        if (err)
-               goto out_eraseblock_size;
+               return err;
        err = device_create_file(&ubi->dev, &dev_total_eraseblocks);
        if (err)
-               goto out_avail_eraseblocks;
+               return err;
        err = device_create_file(&ubi->dev, &dev_volumes_count);
        if (err)
-               goto out_total_eraseblocks;
+               return err;
        err = device_create_file(&ubi->dev, &dev_max_ec);
        if (err)
-               goto out_volumes_count;
+               return err;
        err = device_create_file(&ubi->dev, &dev_reserved_for_bad);
        if (err)
-               goto out_volumes_max_ec;
+               return err;
        err = device_create_file(&ubi->dev, &dev_bad_peb_count);
        if (err)
-               goto out_reserved_for_bad;
+               return err;
        err = device_create_file(&ubi->dev, &dev_max_vol_count);
        if (err)
-               goto out_bad_peb_count;
+               return err;
        err = device_create_file(&ubi->dev, &dev_min_io_size);
        if (err)
-               goto out_max_vol_count;
+               return err;
        err = device_create_file(&ubi->dev, &dev_bgt_enabled);
-       if (err)
-               goto out_min_io_size;
-
-       return 0;
-
-out_min_io_size:
-       device_remove_file(&ubi->dev, &dev_min_io_size);
-out_max_vol_count:
-       device_remove_file(&ubi->dev, &dev_max_vol_count);
-out_bad_peb_count:
-       device_remove_file(&ubi->dev, &dev_bad_peb_count);
-out_reserved_for_bad:
-       device_remove_file(&ubi->dev, &dev_reserved_for_bad);
-out_volumes_max_ec:
-       device_remove_file(&ubi->dev, &dev_max_ec);
-out_volumes_count:
-       device_remove_file(&ubi->dev, &dev_volumes_count);
-out_total_eraseblocks:
-       device_remove_file(&ubi->dev, &dev_total_eraseblocks);
-out_avail_eraseblocks:
-       device_remove_file(&ubi->dev, &dev_avail_eraseblocks);
-out_eraseblock_size:
-       device_remove_file(&ubi->dev, &dev_eraseblock_size);
-out_unregister:
-       device_unregister(&ubi->dev);
-out:
-       ubi_err("failed to initialize sysfs for %s, error %d",
-               ubi->ubi_name, err);
        return err;
 }
 
@@ -296,7 +268,7 @@ static int uif_init(struct ubi_device *ubi)
 
        err = ubi_sysfs_init(ubi);
        if (err)
-               goto out_cdev;
+               goto out_sysfs;
 
        for (i = 0; i < ubi->vtbl_slots; i++)
                if (ubi->volumes[i]) {
@@ -311,8 +283,8 @@ static int uif_init(struct ubi_device *ubi)
 
 out_volumes:
        kill_volumes(ubi);
+out_sysfs:
        ubi_sysfs_close(ubi);
-out_cdev:
        cdev_del(&ubi->cdev);
 out_unreg:
        unregister_chrdev_region(ubi->cdev.dev, ubi->vtbl_slots + 1);