[PATCH] fix rescan_partitions to return errors properly
[powerpc.git] / fs / partitions / check.c
index ac32a2e..8a7d003 100644 (file)
@@ -180,7 +180,7 @@ check_partition(struct gendisk *hd, struct block_device *bdev)
        }
        if (res > 0)
                return state;
-       if (!err)
+       if (err)
        /* The partition is unrecognized. So report I/O errors if there were any */
                res = err;
        if (!res)
@@ -358,8 +358,7 @@ void delete_partition(struct gendisk *disk, int part)
        p->ios[0] = p->ios[1] = 0;
        p->sectors[0] = p->sectors[1] = 0;
        sysfs_remove_link(&p->kobj, "subsystem");
-       if (p->holder_dir)
-               kobject_unregister(p->holder_dir);
+       kobject_unregister(p->holder_dir);
        kobject_uevent(&p->kobj, KOBJ_REMOVE);
        kobject_del(&p->kobj);
        kobject_put(&p->kobj);
@@ -542,7 +541,7 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
        if (!get_capacity(disk) || !(state = check_partition(disk, bdev)))
                return 0;
        if (IS_ERR(state))      /* I/O error reading the partition table */
-               return PTR_ERR(state);
+               return -EIO;
        for (p = 1; p < state->limit; p++) {
                sector_t size = state->parts[p].size;
                sector_t from = state->parts[p].from;
@@ -603,10 +602,8 @@ void del_gendisk(struct gendisk *disk)
        disk->stamp = 0;
 
        kobject_uevent(&disk->kobj, KOBJ_REMOVE);
-       if (disk->holder_dir)
-               kobject_unregister(disk->holder_dir);
-       if (disk->slave_dir)
-               kobject_unregister(disk->slave_dir);
+       kobject_unregister(disk->holder_dir);
+       kobject_unregister(disk->slave_dir);
        if (disk->driverfs_dev) {
                char *disk_name = make_block_name(disk);
                sysfs_remove_link(&disk->kobj, "device");