static u32 cpu_use[NR_CPUS];
 
-static DEFINE_SPINLOCK(rssd_index_lock);
 static DEFINE_IDA(rssd_index_ida);
 
 static int mtip_block_initialize(struct driver_data *dd);
                goto alloc_disk_error;
        }
 
-       /* Generate the disk name, implemented same as in sd.c */
-       do {
-               if (!ida_pre_get(&rssd_index_ida, GFP_KERNEL)) {
-                       rv = -ENOMEM;
-                       goto ida_get_error;
-               }
-
-               spin_lock(&rssd_index_lock);
-               rv = ida_get_new(&rssd_index_ida, &index);
-               spin_unlock(&rssd_index_lock);
-       } while (rv == -EAGAIN);
-
-       if (rv)
+       rv = ida_alloc(&rssd_index_ida, GFP_KERNEL);
+       if (rv < 0)
                goto ida_get_error;
+       index = rv;
 
        rv = rssd_disk_name_format("rssd",
                                index,
 block_queue_alloc_tag_error:
        mtip_hw_debugfs_exit(dd);
 disk_index_error:
-       spin_lock(&rssd_index_lock);
-       ida_remove(&rssd_index_ida, index);
-       spin_unlock(&rssd_index_lock);
+       ida_free(&rssd_index_ida, index);
 
 ida_get_error:
        put_disk(dd->disk);
        }
        dd->disk  = NULL;
 
-       spin_lock(&rssd_index_lock);
-       ida_remove(&rssd_index_ida, dd->index);
-       spin_unlock(&rssd_index_lock);
+       ida_free(&rssd_index_ida, dd->index);
 
        /* De-initialize the protocol layer. */
        mtip_hw_exit(dd);
                dd->queue = NULL;
        }
 
-       spin_lock(&rssd_index_lock);
-       ida_remove(&rssd_index_ida, dd->index);
-       spin_unlock(&rssd_index_lock);
+       ida_free(&rssd_index_ida, dd->index);
        return 0;
 }