unsigned int current_page;
};
-static DEFINE_IDR(mspro_block_disk_idr);
+static DEFINE_IDA(mspro_block_disks);
static DEFINE_MUTEX(mspro_block_disk_lock);
static int mspro_block_complete_req(struct memstick_dev *card, int error);
if (!msb->usage_count) {
kfree(msb);
disk->private_data = NULL;
- idr_remove(&mspro_block_disk_idr, disk_id);
+ ida_free(&mspro_block_disks, disk_id);
put_disk(disk);
}
}
msb->page_size = be16_to_cpu(sys_info->unit_size);
- mutex_lock(&mspro_block_disk_lock);
- disk_id = idr_alloc(&mspro_block_disk_idr, card, 0, 256, GFP_KERNEL);
- mutex_unlock(&mspro_block_disk_lock);
+ disk_id = ida_alloc_max(&mspro_block_disks, 255, GFP_KERNEL);
if (disk_id < 0)
return disk_id;
out_put_disk:
put_disk(msb->disk);
out_release_id:
- mutex_lock(&mspro_block_disk_lock);
- idr_remove(&mspro_block_disk_idr, disk_id);
- mutex_unlock(&mspro_block_disk_lock);
+ ida_free(&mspro_block_disks, disk_id);
return rc;
}
{
memstick_unregister_driver(&mspro_block_driver);
unregister_blkdev(major, DRIVER_NAME);
- idr_destroy(&mspro_block_disk_idr);
}
module_init(mspro_block_init);