|
@@ -879,21 +879,22 @@ static void nvmet_ctrl_free(struct kref *ref)
|
|
|
struct nvmet_ctrl *ctrl = container_of(ref, struct nvmet_ctrl, ref);
|
|
|
struct nvmet_subsys *subsys = ctrl->subsys;
|
|
|
|
|
|
- nvmet_stop_keep_alive_timer(ctrl);
|
|
|
-
|
|
|
mutex_lock(&subsys->lock);
|
|
|
list_del(&ctrl->subsys_entry);
|
|
|
mutex_unlock(&subsys->lock);
|
|
|
|
|
|
+ nvmet_stop_keep_alive_timer(ctrl);
|
|
|
+
|
|
|
flush_work(&ctrl->async_event_work);
|
|
|
cancel_work_sync(&ctrl->fatal_err_work);
|
|
|
|
|
|
ida_simple_remove(&cntlid_ida, ctrl->cntlid);
|
|
|
- nvmet_subsys_put(subsys);
|
|
|
|
|
|
kfree(ctrl->sqs);
|
|
|
kfree(ctrl->cqs);
|
|
|
kfree(ctrl);
|
|
|
+
|
|
|
+ nvmet_subsys_put(subsys);
|
|
|
}
|
|
|
|
|
|
void nvmet_ctrl_put(struct nvmet_ctrl *ctrl)
|