Lines Matching refs:subsys

150 static void nvme_put_subsystem(struct nvme_subsystem *subsys);
671 ida_free(&head->subsys->ns_ida, head->instance); in nvme_free_ns_head()
673 nvme_put_subsystem(head->subsys); in nvme_free_ns_head()
1241 mutex_lock(&ctrl->subsys->lock); in nvme_passthru_start()
1242 nvme_mpath_start_freeze(ctrl->subsys); in nvme_passthru_start()
1243 nvme_mpath_wait_freeze(ctrl->subsys); in nvme_passthru_start()
1256 nvme_mpath_unfreeze(ctrl->subsys); in nvme_passthru_end()
1257 mutex_unlock(&ctrl->subsys->lock); in nvme_passthru_end()
2051 atomic_bs = (1 + ns->ctrl->subsys->awupf) * bs; in nvme_configure_atomic_write()
3067 static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ctrl, in nvme_init_subnqn() argument
3076 strscpy(subsys->subnqn, id->subnqn, NVMF_NQN_SIZE); in nvme_init_subnqn()
3089 off = snprintf(subsys->subnqn, NVMF_NQN_SIZE, in nvme_init_subnqn()
3092 memcpy(subsys->subnqn + off, id->sn, sizeof(id->sn)); in nvme_init_subnqn()
3094 memcpy(subsys->subnqn + off, id->mn, sizeof(id->mn)); in nvme_init_subnqn()
3096 memset(subsys->subnqn + off, 0, sizeof(subsys->subnqn) - off); in nvme_init_subnqn()
3101 struct nvme_subsystem *subsys = in nvme_release_subsystem() local
3104 if (subsys->instance >= 0) in nvme_release_subsystem()
3105 ida_free(&nvme_instance_ida, subsys->instance); in nvme_release_subsystem()
3106 kfree(subsys); in nvme_release_subsystem()
3111 struct nvme_subsystem *subsys = in nvme_destroy_subsystem() local
3115 list_del(&subsys->entry); in nvme_destroy_subsystem()
3118 ida_destroy(&subsys->ns_ida); in nvme_destroy_subsystem()
3119 device_del(&subsys->dev); in nvme_destroy_subsystem()
3120 put_device(&subsys->dev); in nvme_destroy_subsystem()
3123 static void nvme_put_subsystem(struct nvme_subsystem *subsys) in nvme_put_subsystem() argument
3125 kref_put(&subsys->ref, nvme_destroy_subsystem); in nvme_put_subsystem()
3130 struct nvme_subsystem *subsys; in __nvme_find_get_subsystem() local
3145 list_for_each_entry(subsys, &nvme_subsystems, entry) { in __nvme_find_get_subsystem()
3146 if (strcmp(subsys->subnqn, subsysnqn)) in __nvme_find_get_subsystem()
3148 if (!kref_get_unless_zero(&subsys->ref)) in __nvme_find_get_subsystem()
3150 return subsys; in __nvme_find_get_subsystem()
3166 static bool nvme_validate_cntlid(struct nvme_subsystem *subsys, in nvme_validate_cntlid() argument
3173 list_for_each_entry(tmp, &subsys->ctrls, subsys_entry) { in nvme_validate_cntlid()
3181 subsys->subnqn); in nvme_validate_cntlid()
3199 struct nvme_subsystem *subsys, *found; in nvme_init_subsystem() local
3202 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL); in nvme_init_subsystem()
3203 if (!subsys) in nvme_init_subsystem()
3206 subsys->instance = -1; in nvme_init_subsystem()
3207 mutex_init(&subsys->lock); in nvme_init_subsystem()
3208 kref_init(&subsys->ref); in nvme_init_subsystem()
3209 INIT_LIST_HEAD(&subsys->ctrls); in nvme_init_subsystem()
3210 INIT_LIST_HEAD(&subsys->nsheads); in nvme_init_subsystem()
3211 nvme_init_subnqn(subsys, ctrl, id); in nvme_init_subsystem()
3212 memcpy(subsys->serial, id->sn, sizeof(subsys->serial)); in nvme_init_subsystem()
3213 memcpy(subsys->model, id->mn, sizeof(subsys->model)); in nvme_init_subsystem()
3214 subsys->vendor_id = le16_to_cpu(id->vid); in nvme_init_subsystem()
3215 subsys->cmic = id->cmic; in nvme_init_subsystem()
3216 subsys->awupf = le16_to_cpu(id->awupf); in nvme_init_subsystem()
3220 !strcmp(subsys->subnqn, NVME_DISC_SUBSYS_NAME)) in nvme_init_subsystem()
3221 subsys->subtype = NVME_NQN_DISC; in nvme_init_subsystem()
3223 subsys->subtype = NVME_NQN_NVME; in nvme_init_subsystem()
3225 if (nvme_discovery_ctrl(ctrl) && subsys->subtype != NVME_NQN_DISC) { in nvme_init_subsystem()
3228 subsys->subnqn); in nvme_init_subsystem()
3229 kfree(subsys); in nvme_init_subsystem()
3232 nvme_mpath_default_iopolicy(subsys); in nvme_init_subsystem()
3234 subsys->dev.class = &nvme_subsys_class; in nvme_init_subsystem()
3235 subsys->dev.release = nvme_release_subsystem; in nvme_init_subsystem()
3236 subsys->dev.groups = nvme_subsys_attrs_groups; in nvme_init_subsystem()
3237 dev_set_name(&subsys->dev, "nvme-subsys%d", ctrl->instance); in nvme_init_subsystem()
3238 device_initialize(&subsys->dev); in nvme_init_subsystem()
3241 found = __nvme_find_get_subsystem(subsys->subnqn); in nvme_init_subsystem()
3243 put_device(&subsys->dev); in nvme_init_subsystem()
3244 subsys = found; in nvme_init_subsystem()
3246 if (!nvme_validate_cntlid(subsys, ctrl, id)) { in nvme_init_subsystem()
3251 ret = device_add(&subsys->dev); in nvme_init_subsystem()
3255 put_device(&subsys->dev); in nvme_init_subsystem()
3258 ida_init(&subsys->ns_ida); in nvme_init_subsystem()
3259 list_add_tail(&subsys->entry, &nvme_subsystems); in nvme_init_subsystem()
3262 ret = sysfs_create_link(&subsys->dev.kobj, &ctrl->device->kobj, in nvme_init_subsystem()
3271 subsys->instance = ctrl->instance; in nvme_init_subsystem()
3272 ctrl->subsys = subsys; in nvme_init_subsystem()
3273 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls); in nvme_init_subsystem()
3278 nvme_put_subsystem(subsys); in nvme_init_subsystem()
3368 if (ctrl->subsys->subtype != NVME_NQN_NVME || in nvme_init_non_mdts_limits()
3554 memcpy(ctrl->subsys->firmware_rev, id->fr, in nvme_init_identify()
3555 sizeof(ctrl->subsys->firmware_rev)); in nvme_init_identify()
3685 ctrl->subsys->subnqn); in nvme_init_ctrl_finish()
3768 lockdep_assert_held(&ctrl->subsys->lock); in nvme_find_ns_head()
3770 list_for_each_entry(h, &ctrl->subsys->nsheads, entry) { in nvme_find_ns_head()
3785 static int nvme_subsys_check_duplicate_ids(struct nvme_subsystem *subsys, in nvme_subsys_check_duplicate_ids() argument
3793 lockdep_assert_held(&subsys->lock); in nvme_subsys_check_duplicate_ids()
3795 list_for_each_entry(h, &subsys->nsheads, entry) { in nvme_subsys_check_duplicate_ids()
3890 ret = ida_alloc_min(&ctrl->subsys->ns_ida, 1, GFP_KERNEL); in nvme_alloc_ns_head()
3898 head->subsys = ctrl->subsys; in nvme_alloc_ns_head()
3918 list_add_tail(&head->entry, &ctrl->subsys->nsheads); in nvme_alloc_ns_head()
3920 kref_get(&ctrl->subsys->ref); in nvme_alloc_ns_head()
3926 ida_free(&ctrl->subsys->ns_ida, head->instance); in nvme_alloc_ns_head()
3967 ret = nvme_global_check_duplicate_ids(ctrl->subsys, &info->ids); in nvme_init_ns_head()
3987 ((ns->ctrl->subsys->cmic & NVME_CTRL_CMIC_MULTI_CTRL) && in nvme_init_ns_head()
4005 mutex_lock(&ctrl->subsys->lock); in nvme_init_ns_head()
4008 ret = nvme_subsys_check_duplicate_ids(ctrl->subsys, &info->ids); in nvme_init_ns_head()
4047 mutex_unlock(&ctrl->subsys->lock); in nvme_init_ns_head()
4057 mutex_unlock(&ctrl->subsys->lock); in nvme_init_ns_head()
4143 sprintf(disk->disk_name, "nvme%dc%dn%d", ctrl->subsys->instance, in nvme_alloc_ns()
4147 sprintf(disk->disk_name, "nvme%dn%d", ctrl->subsys->instance, in nvme_alloc_ns()
4196 mutex_lock(&ctrl->subsys->lock); in nvme_alloc_ns()
4211 mutex_unlock(&ctrl->subsys->lock); in nvme_alloc_ns()
4242 mutex_lock(&ns->ctrl->subsys->lock); in nvme_ns_remove()
4249 mutex_unlock(&ns->ctrl->subsys->lock); in nvme_ns_remove()
4700 memcpy(ctrl->subsys->firmware_rev, &log->frs[cur_fw_slot - 1], in nvme_get_fw_slot_info()
4701 sizeof(ctrl->subsys->firmware_rev)); in nvme_get_fw_slot_info()
5031 struct nvme_subsystem *subsys = ctrl->subsys; in nvme_free_ctrl() local
5033 if (!subsys || ctrl->instance != subsys->instance) in nvme_free_ctrl()
5043 if (subsys) { in nvme_free_ctrl()
5046 sysfs_remove_link(&subsys->dev.kobj, dev_name(ctrl->device)); in nvme_free_ctrl()
5052 if (subsys) in nvme_free_ctrl()
5053 nvme_put_subsystem(subsys); in nvme_free_ctrl()