};
/* Linked list of all ubiblock instances */
+/* These two should probably be combined into an XArray */
static LIST_HEAD(ubiblock_devices);
-static DEFINE_IDR(ubiblock_minor_idr);
-/* Protects ubiblock_devices and ubiblock_minor_idr */
+static DEFINE_IDA(ubiblock_minor_ids);
+/* Protects ubiblock_devices and ubiblock_minor_ids */
static DEFINE_MUTEX(devices_mutex);
static int ubiblock_major;
gd->fops = &ubiblock_ops;
gd->major = ubiblock_major;
- gd->first_minor = idr_alloc(&ubiblock_minor_idr, dev, 0, 0, GFP_KERNEL);
+ gd->first_minor = ida_alloc(&ubiblock_minor_ids, GFP_KERNEL);
if (gd->first_minor < 0) {
dev_err(disk_to_dev(gd),
"block: dynamic minor allocation failed");
out_free_tags:
blk_mq_free_tag_set(&dev->tag_set);
out_remove_minor:
- idr_remove(&ubiblock_minor_idr, gd->first_minor);
+ ida_free(&ubiblock_minor_ids, gd->first_minor);
out_put_disk:
put_disk(dev->gd);
out_free_dev:
blk_cleanup_queue(dev->rq);
blk_mq_free_tag_set(&dev->tag_set);
dev_info(disk_to_dev(dev->gd), "released");
- idr_remove(&ubiblock_minor_idr, dev->gd->first_minor);
+ ida_free(&ubiblock_minor_ids, dev->gd->first_minor);
put_disk(dev->gd);
}