Lines Matching defs:subsys

150 static void nvme_put_subsystem(struct nvme_subsystem *subsys);
671 ida_free(&head->subsys->ns_ida, head->instance);
673 nvme_put_subsystem(head->subsys);
1245 mutex_lock(&ctrl->subsys->lock);
1246 nvme_mpath_start_freeze(ctrl->subsys);
1247 nvme_mpath_wait_freeze(ctrl->subsys);
1260 nvme_mpath_unfreeze(ctrl->subsys);
1261 mutex_unlock(&ctrl->subsys->lock);
3098 static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ctrl,
3107 strscpy(subsys->subnqn, id->subnqn, NVMF_NQN_SIZE);
3120 off = snprintf(subsys->subnqn, NVMF_NQN_SIZE,
3123 memcpy(subsys->subnqn + off, id->sn, sizeof(id->sn));
3125 memcpy(subsys->subnqn + off, id->mn, sizeof(id->mn));
3127 memset(subsys->subnqn + off, 0, sizeof(subsys->subnqn) - off);
3132 struct nvme_subsystem *subsys =
3135 if (subsys->instance >= 0)
3136 ida_free(&nvme_instance_ida, subsys->instance);
3137 kfree(subsys);
3142 struct nvme_subsystem *subsys =
3146 list_del(&subsys->entry);
3149 ida_destroy(&subsys->ns_ida);
3150 device_del(&subsys->dev);
3151 put_device(&subsys->dev);
3154 static void nvme_put_subsystem(struct nvme_subsystem *subsys)
3156 kref_put(&subsys->ref, nvme_destroy_subsystem);
3161 struct nvme_subsystem *subsys;
3176 list_for_each_entry(subsys, &nvme_subsystems, entry) {
3177 if (strcmp(subsys->subnqn, subsysnqn))
3179 if (!kref_get_unless_zero(&subsys->ref))
3181 return subsys;
3202 static bool nvme_validate_cntlid(struct nvme_subsystem *subsys,
3209 list_for_each_entry(tmp, &subsys->ctrls, subsys_entry) {
3215 "Duplicate cntlid %u with %s, subsys %s, rejecting\n",
3217 subsys->subnqn);
3235 struct nvme_subsystem *subsys, *found;
3238 subsys = kzalloc_obj(*subsys);
3239 if (!subsys)
3242 subsys->instance = -1;
3243 mutex_init(&subsys->lock);
3244 kref_init(&subsys->ref);
3245 INIT_LIST_HEAD(&subsys->ctrls);
3246 INIT_LIST_HEAD(&subsys->nsheads);
3247 nvme_init_subnqn(subsys, ctrl, id);
3248 memcpy(subsys->serial, id->sn, sizeof(subsys->serial));
3249 memcpy(subsys->model, id->mn, sizeof(subsys->model));
3250 subsys->vendor_id = le16_to_cpu(id->vid);
3251 subsys->cmic = id->cmic;
3255 !strcmp(subsys->subnqn, NVME_DISC_SUBSYS_NAME))
3256 subsys->subtype = NVME_NQN_DISC;
3258 subsys->subtype = NVME_NQN_NVME;
3260 if (nvme_discovery_ctrl(ctrl) && subsys->subtype != NVME_NQN_DISC) {
3263 subsys->subnqn);
3264 kfree(subsys);
3267 nvme_mpath_default_iopolicy(subsys);
3269 subsys->dev.class = &nvme_subsys_class;
3270 subsys->dev.release = nvme_release_subsystem;
3271 subsys->dev.groups = nvme_subsys_attrs_groups;
3272 dev_set_name(&subsys->dev, "nvme-subsys%d", ctrl->instance);
3273 device_initialize(&subsys->dev);
3276 found = __nvme_find_get_subsystem(subsys->subnqn);
3278 put_device(&subsys->dev);
3279 subsys = found;
3281 if (!nvme_validate_cntlid(subsys, ctrl, id)) {
3286 ret = device_add(&subsys->dev);
3290 put_device(&subsys->dev);
3293 ida_init(&subsys->ns_ida);
3294 list_add_tail(&subsys->entry, &nvme_subsystems);
3297 ret = sysfs_create_link(&subsys->dev.kobj, &ctrl->device->kobj,
3306 subsys->instance = ctrl->instance;
3307 ctrl->subsys = subsys;
3308 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls);
3313 nvme_put_subsystem(subsys);
3589 memcpy(ctrl->subsys->firmware_rev, id->fr,
3590 sizeof(ctrl->subsys->firmware_rev));
3721 ctrl->subsys->subnqn);
3804 lockdep_assert_held(&ctrl->subsys->lock);
3806 list_for_each_entry(h, &ctrl->subsys->nsheads, entry) {
3821 static int nvme_subsys_check_duplicate_ids(struct nvme_subsystem *subsys,
3829 lockdep_assert_held(&subsys->lock);
3831 list_for_each_entry(h, &subsys->nsheads, entry) {
3926 ret = ida_alloc_min(&ctrl->subsys->ns_ida, 1, GFP_KERNEL);
3934 head->subsys = ctrl->subsys;
3954 list_add_tail(&head->entry, &ctrl->subsys->nsheads);
3956 kref_get(&ctrl->subsys->ref);
3962 ida_free(&ctrl->subsys->ns_ida, head->instance);
4003 ret = nvme_global_check_duplicate_ids(ctrl->subsys, &info->ids);
4023 ((ns->ctrl->subsys->cmic & NVME_CTRL_CMIC_MULTI_CTRL) &&
4041 mutex_lock(&ctrl->subsys->lock);
4044 ret = nvme_subsys_check_duplicate_ids(ctrl->subsys, &info->ids);
4083 mutex_unlock(&ctrl->subsys->lock);
4093 mutex_unlock(&ctrl->subsys->lock);
4179 sprintf(disk->disk_name, "nvme%dc%dn%d", ctrl->subsys->instance,
4183 sprintf(disk->disk_name, "nvme%dn%d", ctrl->subsys->instance,
4225 mutex_lock(&ctrl->subsys->lock);
4240 mutex_unlock(&ctrl->subsys->lock);
4271 mutex_lock(&ns->ctrl->subsys->lock);
4278 mutex_unlock(&ns->ctrl->subsys->lock);
4729 memcpy(ctrl->subsys->firmware_rev, &log->frs[cur_fw_slot - 1],
4730 sizeof(ctrl->subsys->firmware_rev));
5071 struct nvme_subsystem *subsys = ctrl->subsys;
5075 if (!subsys || ctrl->instance != subsys->instance)
5085 if (subsys) {
5088 sysfs_remove_link(&subsys->dev.kobj, dev_name(ctrl->device));
5094 if (subsys)
5095 nvme_put_subsystem(subsys);