}
}
-static DEFINE_IDR(msb_disk_idr); /*set of used disk numbers */
+static DEFINE_IDA(msb_disks); /*set of used disk numbers */
static DEFINE_MUTEX(msb_disk_lock); /* protects against races in open/release */
static int msb_bd_open(struct block_device *bdev, fmode_t mode)
if (!msb->usage_count) {
disk->private_data = NULL;
- idr_remove(&msb_disk_idr, msb->disk_id);
+ ida_free(&msb_disks, msb->disk_id);
put_disk(disk);
kfree(msb);
}
int rc;
unsigned long capacity;
- mutex_lock(&msb_disk_lock);
- msb->disk_id = idr_alloc(&msb_disk_idr, card, 0, 256, GFP_KERNEL);
- mutex_unlock(&msb_disk_lock);
+ msb->disk_id = ida_alloc_max(&msb_disks, 255, GFP_KERNEL);
if (msb->disk_id < 0)
return msb->disk_id;
out_put_disk:
put_disk(msb->disk);
out_release_id:
- mutex_lock(&msb_disk_lock);
- idr_remove(&msb_disk_idr, msb->disk_id);
- mutex_unlock(&msb_disk_lock);
+ ida_free(&msb_disks, msb->disk_id);
return rc;
}
static void __exit msb_exit(void)
{
memstick_unregister_driver(&msb_driver);
- idr_destroy(&msb_disk_idr);
}
module_init(msb_init);