if (disk_added)
                        del_gendisk(disk);
 
-               if (disk->queue)
-                       blk_cleanup_queue(disk->queue);
-
+               blk_cleanup_disk(disk);
                ida_simple_remove(&bcache_device_idx,
                                  first_minor_to_idx(disk->first_minor));
-               if (disk_added)
-                       put_disk(disk);
        }
 
        bioset_exit(&d->bio_split);
                        BIOSET_NEED_BVECS|BIOSET_NEED_RESCUER))
                goto err;
 
-       d->disk = alloc_disk(BCACHE_MINORS);
+       d->disk = blk_alloc_disk(NUMA_NO_NODE);
        if (!d->disk)
                goto err;
 
 
        d->disk->major          = bcache_major;
        d->disk->first_minor    = idx_to_first_minor(idx);
+       d->disk->minors         = BCACHE_MINORS;
        d->disk->fops           = ops;
        d->disk->private_data   = d;
 
-       q = blk_alloc_queue(NUMA_NO_NODE);
-       if (!q)
-               return -ENOMEM;
-
-       d->disk->queue                  = q;
+       q = d->disk->queue;
        q->limits.max_hw_sectors        = UINT_MAX;
        q->limits.max_sectors           = UINT_MAX;
        q->limits.max_segment_size      = UINT_MAX;