>  /**
> - * add_disk - add partitioning information to kernel list
> + * device_add_disk - add partitioning information to kernel list
> + * @parent: parent device for the disk
>   * @disk: per-device partitioning information
>   *
>   * This function registers the partitioning information in @disk
> @@ -581,7 +582,7 @@ exit:
>   *
>   * FIXME: error handling
>   */
> -void add_disk(struct gendisk *disk)
> +int device_add_disk(struct device *parent, struct gendisk *disk)
>  {
>       struct backing_dev_info *bdi;
>       dev_t devt;
> @@ -597,10 +598,8 @@ void add_disk(struct gendisk *disk)
>       disk->flags |= GENHD_FL_UP;
>  
>       retval = blk_alloc_devt(&disk->part0, &devt);
> -     if (retval) {
> -             WARN_ON(1);
> -             return;
> -     }
> +     if (retval)
> +             return retval;
>       disk_to_dev(disk)->devt = devt;
>  
>       /* ->major and ->first_minor aren't supposed to be
> @@ -617,7 +616,7 @@ void add_disk(struct gendisk *disk)
>  
>       blk_register_region(disk_devt(disk), disk->minors, NULL,
>                           exact_match, exact_lock, disk);
> -     register_disk(disk);
> +     register_disk(parent, disk);
>       blk_register_queue(disk);
>  
>       /*
> @@ -628,12 +627,11 @@ void add_disk(struct gendisk *disk)
>  
>       retval = sysfs_create_link(&disk_to_dev(disk)->kobj, &bdi->dev->kobj,
>                                  "bdi");
> -     WARN_ON(retval);
> -
>       disk_add_events(disk);
>       blk_integrity_add(disk);
> +     return retval;

How are the callers expected to unwind after already having added the
disk?

Reply via email to