Commit 9843f685 authored by Christoph Hellwig's avatar Christoph Hellwig

nvme: use ida_simple_{get,remove} for the controller instance

Switch to the ida_simple_* helpers instead of opencoding them.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarKeith Busch <keith.busch@intel.com>
Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
parent ba2dec35
...@@ -74,6 +74,8 @@ EXPORT_SYMBOL_GPL(nvme_wq); ...@@ -74,6 +74,8 @@ EXPORT_SYMBOL_GPL(nvme_wq);
static LIST_HEAD(nvme_ctrl_list); static LIST_HEAD(nvme_ctrl_list);
static DEFINE_SPINLOCK(dev_list_lock); static DEFINE_SPINLOCK(dev_list_lock);
static DEFINE_IDA(nvme_instance_ida);
static struct class *nvme_class; static struct class *nvme_class;
static __le32 nvme_get_log_dw10(u8 lid, size_t size) static __le32 nvme_get_log_dw10(u8 lid, size_t size)
...@@ -2696,35 +2698,6 @@ void nvme_queue_async_events(struct nvme_ctrl *ctrl) ...@@ -2696,35 +2698,6 @@ void nvme_queue_async_events(struct nvme_ctrl *ctrl)
} }
EXPORT_SYMBOL_GPL(nvme_queue_async_events); EXPORT_SYMBOL_GPL(nvme_queue_async_events);
static DEFINE_IDA(nvme_instance_ida);
static int nvme_set_instance(struct nvme_ctrl *ctrl)
{
int instance, error;
do {
if (!ida_pre_get(&nvme_instance_ida, GFP_KERNEL))
return -ENODEV;
spin_lock(&dev_list_lock);
error = ida_get_new(&nvme_instance_ida, &instance);
spin_unlock(&dev_list_lock);
} while (error == -EAGAIN);
if (error)
return -ENODEV;
ctrl->instance = instance;
return 0;
}
static void nvme_release_instance(struct nvme_ctrl *ctrl)
{
spin_lock(&dev_list_lock);
ida_remove(&nvme_instance_ida, ctrl->instance);
spin_unlock(&dev_list_lock);
}
void nvme_stop_ctrl(struct nvme_ctrl *ctrl) void nvme_stop_ctrl(struct nvme_ctrl *ctrl)
{ {
nvme_stop_keep_alive(ctrl); nvme_stop_keep_alive(ctrl);
...@@ -2762,7 +2735,7 @@ static void nvme_free_ctrl(struct kref *kref) ...@@ -2762,7 +2735,7 @@ static void nvme_free_ctrl(struct kref *kref)
struct nvme_ctrl *ctrl = container_of(kref, struct nvme_ctrl, kref); struct nvme_ctrl *ctrl = container_of(kref, struct nvme_ctrl, kref);
put_device(ctrl->device); put_device(ctrl->device);
nvme_release_instance(ctrl); ida_simple_remove(&nvme_instance_ida, ctrl->instance);
ida_destroy(&ctrl->ns_ida); ida_destroy(&ctrl->ns_ida);
ctrl->ops->free_ctrl(ctrl); ctrl->ops->free_ctrl(ctrl);
...@@ -2796,9 +2769,10 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, ...@@ -2796,9 +2769,10 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev,
INIT_WORK(&ctrl->async_event_work, nvme_async_event_work); INIT_WORK(&ctrl->async_event_work, nvme_async_event_work);
INIT_WORK(&ctrl->fw_act_work, nvme_fw_act_work); INIT_WORK(&ctrl->fw_act_work, nvme_fw_act_work);
ret = nvme_set_instance(ctrl); ret = ida_simple_get(&nvme_instance_ida, 0, 0, GFP_KERNEL);
if (ret) if (ret < 0)
goto out; goto out;
ctrl->instance = ret;
ctrl->device = device_create_with_groups(nvme_class, ctrl->dev, ctrl->device = device_create_with_groups(nvme_class, ctrl->dev,
MKDEV(nvme_char_major, ctrl->instance), MKDEV(nvme_char_major, ctrl->instance),
...@@ -2825,7 +2799,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, ...@@ -2825,7 +2799,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev,
return 0; return 0;
out_release_instance: out_release_instance:
nvme_release_instance(ctrl); ida_simple_remove(&nvme_instance_ida, ctrl->instance);
out: out:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment