Lines Matching refs:subsys

133 static void nvme_put_subsystem(struct nvme_subsystem *subsys);
650 ida_free(&head->subsys->ns_ida, head->instance);
652 nvme_put_subsystem(head->subsys);
1164 mutex_lock(&ctrl->subsys->lock);
1165 nvme_mpath_start_freeze(ctrl->subsys);
1166 nvme_mpath_wait_freeze(ctrl->subsys);
1179 nvme_mpath_unfreeze(ctrl->subsys);
1180 mutex_unlock(&ctrl->subsys->lock);
1964 atomic_bs = (1 + ns->ctrl->subsys->awupf) * bs;
2737 static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ctrl,
2746 strscpy(subsys->subnqn, id->subnqn, NVMF_NQN_SIZE);
2759 off = snprintf(subsys->subnqn, NVMF_NQN_SIZE,
2762 memcpy(subsys->subnqn + off, id->sn, sizeof(id->sn));
2764 memcpy(subsys->subnqn + off, id->mn, sizeof(id->mn));
2766 memset(subsys->subnqn + off, 0, sizeof(subsys->subnqn) - off);
2771 struct nvme_subsystem *subsys =
2774 if (subsys->instance >= 0)
2775 ida_free(&nvme_instance_ida, subsys->instance);
2776 kfree(subsys);
2781 struct nvme_subsystem *subsys =
2785 list_del(&subsys->entry);
2788 ida_destroy(&subsys->ns_ida);
2789 device_del(&subsys->dev);
2790 put_device(&subsys->dev);
2793 static void nvme_put_subsystem(struct nvme_subsystem *subsys)
2795 kref_put(&subsys->ref, nvme_destroy_subsystem);
2800 struct nvme_subsystem *subsys;
2815 list_for_each_entry(subsys, &nvme_subsystems, entry) {
2816 if (strcmp(subsys->subnqn, subsysnqn))
2818 if (!kref_get_unless_zero(&subsys->ref))
2820 return subsys;
2831 static bool nvme_validate_cntlid(struct nvme_subsystem *subsys,
2838 list_for_each_entry(tmp, &subsys->ctrls, subsys_entry) {
2844 "Duplicate cntlid %u with %s, subsys %s, rejecting\n",
2846 subsys->subnqn);
2864 struct nvme_subsystem *subsys, *found;
2867 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL);
2868 if (!subsys)
2871 subsys->instance = -1;
2872 mutex_init(&subsys->lock);
2873 kref_init(&subsys->ref);
2874 INIT_LIST_HEAD(&subsys->ctrls);
2875 INIT_LIST_HEAD(&subsys->nsheads);
2876 nvme_init_subnqn(subsys, ctrl, id);
2877 memcpy(subsys->serial, id->sn, sizeof(subsys->serial));
2878 memcpy(subsys->model, id->mn, sizeof(subsys->model));
2879 subsys->vendor_id = le16_to_cpu(id->vid);
2880 subsys->cmic = id->cmic;
2884 !strcmp(subsys->subnqn, NVME_DISC_SUBSYS_NAME))
2885 subsys->subtype = NVME_NQN_DISC;
2887 subsys->subtype = NVME_NQN_NVME;
2889 if (nvme_discovery_ctrl(ctrl) && subsys->subtype != NVME_NQN_DISC) {
2892 subsys->subnqn);
2893 kfree(subsys);
2896 subsys->awupf = le16_to_cpu(id->awupf);
2897 nvme_mpath_default_iopolicy(subsys);
2899 subsys->dev.class = &nvme_subsys_class;
2900 subsys->dev.release = nvme_release_subsystem;
2901 subsys->dev.groups = nvme_subsys_attrs_groups;
2902 dev_set_name(&subsys->dev, "nvme-subsys%d", ctrl->instance);
2903 device_initialize(&subsys->dev);
2906 found = __nvme_find_get_subsystem(subsys->subnqn);
2908 put_device(&subsys->dev);
2909 subsys = found;
2911 if (!nvme_validate_cntlid(subsys, ctrl, id)) {
2916 ret = device_add(&subsys->dev);
2920 put_device(&subsys->dev);
2923 ida_init(&subsys->ns_ida);
2924 list_add_tail(&subsys->entry, &nvme_subsystems);
2927 ret = sysfs_create_link(&subsys->dev.kobj, &ctrl->device->kobj,
2936 subsys->instance = ctrl->instance;
2937 ctrl->subsys = subsys;
2938 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls);
2943 nvme_put_subsystem(subsys);
3021 if (ctrl->subsys->subtype != NVME_NQN_NVME ||
3188 memcpy(ctrl->subsys->firmware_rev, id->fr,
3189 sizeof(ctrl->subsys->firmware_rev));
3392 lockdep_assert_held(&ctrl->subsys->lock);
3394 list_for_each_entry(h, &ctrl->subsys->nsheads, entry) {
3409 static int nvme_subsys_check_duplicate_ids(struct nvme_subsystem *subsys,
3417 lockdep_assert_held(&subsys->lock);
3419 list_for_each_entry(h, &subsys->nsheads, entry) {
3514 ret = ida_alloc_min(&ctrl->subsys->ns_ida, 1, GFP_KERNEL);
3522 head->subsys = ctrl->subsys;
3541 list_add_tail(&head->entry, &ctrl->subsys->nsheads);
3543 kref_get(&ctrl->subsys->ref);
3549 ida_free(&ctrl->subsys->ns_ida, head->instance);
3590 ret = nvme_global_check_duplicate_ids(ctrl->subsys, &info->ids);
3610 ((ns->ctrl->subsys->cmic & NVME_CTRL_CMIC_MULTI_CTRL) &&
3628 mutex_lock(&ctrl->subsys->lock);
3631 ret = nvme_subsys_check_duplicate_ids(ctrl->subsys, &info->ids);
3669 mutex_unlock(&ctrl->subsys->lock);
3675 mutex_unlock(&ctrl->subsys->lock);
3760 sprintf(disk->disk_name, "nvme%dc%dn%d", ctrl->subsys->instance,
3764 sprintf(disk->disk_name, "nvme%dn%d", ctrl->subsys->instance,
3811 mutex_lock(&ctrl->subsys->lock);
3815 mutex_unlock(&ctrl->subsys->lock);
3844 mutex_lock(&ns->ctrl->subsys->lock);
3850 mutex_unlock(&ns->ctrl->subsys->lock);
4247 memcpy(ctrl->subsys->firmware_rev, &log->frs[cur_fw_slot - 1],
4248 sizeof(ctrl->subsys->firmware_rev));
4573 struct nvme_subsystem *subsys = ctrl->subsys;
4575 if (!subsys || ctrl->instance != subsys->instance)
4585 if (subsys) {
4588 sysfs_remove_link(&subsys->dev.kobj, dev_name(ctrl->device));
4594 if (subsys)
4595 nvme_put_subsystem(subsys);