if (need_put) {
                destroy_workqueue(rbd_dev->task_wq);
-               ida_simple_remove(&rbd_dev_id_ida, rbd_dev->dev_id);
+               ida_free(&rbd_dev_id_ida, rbd_dev->dev_id);
        }
 
        rbd_dev_free(rbd_dev);
                return NULL;
 
        /* get an id and fill in device name */
-       rbd_dev->dev_id = ida_simple_get(&rbd_dev_id_ida, 0,
-                                        minor_to_rbd_dev_id(1 << MINORBITS),
-                                        GFP_KERNEL);
+       rbd_dev->dev_id = ida_alloc_max(&rbd_dev_id_ida,
+                                       minor_to_rbd_dev_id(1 << MINORBITS) - 1,
+                                       GFP_KERNEL);
        if (rbd_dev->dev_id < 0)
                goto fail_rbd_dev;
 
        return rbd_dev;
 
 fail_dev_id:
-       ida_simple_remove(&rbd_dev_id_ida, rbd_dev->dev_id);
+       ida_free(&rbd_dev_id_ida, rbd_dev->dev_id);
 fail_rbd_dev:
        rbd_dev_free(rbd_dev);
        return NULL;