Lines Matching refs:subsys

116 static void nvme_put_subsystem(struct nvme_subsystem *subsys);
564 ida_simple_remove(&head->subsys->ns_ida, head->instance); in nvme_free_ns_head()
566 nvme_put_subsystem(head->subsys); in nvme_free_ns_head()
1160 mutex_lock(&ctrl->subsys->lock); in nvme_passthru_start()
1161 nvme_mpath_start_freeze(ctrl->subsys); in nvme_passthru_start()
1162 nvme_mpath_wait_freeze(ctrl->subsys); in nvme_passthru_start()
1174 nvme_mpath_unfreeze(ctrl->subsys); in nvme_passthru_end()
1175 mutex_unlock(&ctrl->subsys->lock); in nvme_passthru_end()
1830 atomic_bs = (1 + ns->ctrl->subsys->awupf) * bs; in nvme_update_disk_info()
2539 static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ctrl, in nvme_init_subnqn() argument
2548 strlcpy(subsys->subnqn, id->subnqn, NVMF_NQN_SIZE); in nvme_init_subnqn()
2557 off = snprintf(subsys->subnqn, NVMF_NQN_SIZE, in nvme_init_subnqn()
2560 memcpy(subsys->subnqn + off, id->sn, sizeof(id->sn)); in nvme_init_subnqn()
2562 memcpy(subsys->subnqn + off, id->mn, sizeof(id->mn)); in nvme_init_subnqn()
2564 memset(subsys->subnqn + off, 0, sizeof(subsys->subnqn) - off); in nvme_init_subnqn()
2569 struct nvme_subsystem *subsys = in nvme_release_subsystem() local
2572 if (subsys->instance >= 0) in nvme_release_subsystem()
2573 ida_simple_remove(&nvme_instance_ida, subsys->instance); in nvme_release_subsystem()
2574 kfree(subsys); in nvme_release_subsystem()
2579 struct nvme_subsystem *subsys = in nvme_destroy_subsystem() local
2583 list_del(&subsys->entry); in nvme_destroy_subsystem()
2586 ida_destroy(&subsys->ns_ida); in nvme_destroy_subsystem()
2587 device_del(&subsys->dev); in nvme_destroy_subsystem()
2588 put_device(&subsys->dev); in nvme_destroy_subsystem()
2591 static void nvme_put_subsystem(struct nvme_subsystem *subsys) in nvme_put_subsystem() argument
2593 kref_put(&subsys->ref, nvme_destroy_subsystem); in nvme_put_subsystem()
2598 struct nvme_subsystem *subsys; in __nvme_find_get_subsystem() local
2613 list_for_each_entry(subsys, &nvme_subsystems, entry) { in __nvme_find_get_subsystem()
2614 if (strcmp(subsys->subnqn, subsysnqn)) in __nvme_find_get_subsystem()
2616 if (!kref_get_unless_zero(&subsys->ref)) in __nvme_find_get_subsystem()
2618 return subsys; in __nvme_find_get_subsystem()
2632 struct nvme_subsystem *subsys = in nvme_subsys_show_nqn() local
2635 return sysfs_emit(buf, "%s\n", subsys->subnqn); in nvme_subsys_show_nqn()
2643 struct nvme_subsystem *subsys = in nvme_subsys_show_type() local
2646 switch (subsys->subtype) { in nvme_subsys_show_type()
2661 struct nvme_subsystem *subsys = \
2664 (int)sizeof(subsys->field), subsys->field); \
2698 static bool nvme_validate_cntlid(struct nvme_subsystem *subsys, in nvme_validate_cntlid() argument
2705 list_for_each_entry(tmp, &subsys->ctrls, subsys_entry) { in nvme_validate_cntlid()
2713 subsys->subnqn); in nvme_validate_cntlid()
2731 struct nvme_subsystem *subsys, *found; in nvme_init_subsystem() local
2734 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL); in nvme_init_subsystem()
2735 if (!subsys) in nvme_init_subsystem()
2738 subsys->instance = -1; in nvme_init_subsystem()
2739 mutex_init(&subsys->lock); in nvme_init_subsystem()
2740 kref_init(&subsys->ref); in nvme_init_subsystem()
2741 INIT_LIST_HEAD(&subsys->ctrls); in nvme_init_subsystem()
2742 INIT_LIST_HEAD(&subsys->nsheads); in nvme_init_subsystem()
2743 nvme_init_subnqn(subsys, ctrl, id); in nvme_init_subsystem()
2744 memcpy(subsys->serial, id->sn, sizeof(subsys->serial)); in nvme_init_subsystem()
2745 memcpy(subsys->model, id->mn, sizeof(subsys->model)); in nvme_init_subsystem()
2746 memcpy(subsys->firmware_rev, id->fr, sizeof(subsys->firmware_rev)); in nvme_init_subsystem()
2747 subsys->vendor_id = le16_to_cpu(id->vid); in nvme_init_subsystem()
2748 subsys->cmic = id->cmic; in nvme_init_subsystem()
2752 !strcmp(subsys->subnqn, NVME_DISC_SUBSYS_NAME)) in nvme_init_subsystem()
2753 subsys->subtype = NVME_NQN_DISC; in nvme_init_subsystem()
2755 subsys->subtype = NVME_NQN_NVME; in nvme_init_subsystem()
2757 if (nvme_discovery_ctrl(ctrl) && subsys->subtype != NVME_NQN_DISC) { in nvme_init_subsystem()
2760 subsys->subnqn); in nvme_init_subsystem()
2761 kfree(subsys); in nvme_init_subsystem()
2764 subsys->awupf = le16_to_cpu(id->awupf); in nvme_init_subsystem()
2766 subsys->iopolicy = NVME_IOPOLICY_NUMA; in nvme_init_subsystem()
2769 subsys->dev.class = nvme_subsys_class; in nvme_init_subsystem()
2770 subsys->dev.release = nvme_release_subsystem; in nvme_init_subsystem()
2771 subsys->dev.groups = nvme_subsys_attrs_groups; in nvme_init_subsystem()
2772 dev_set_name(&subsys->dev, "nvme-subsys%d", ctrl->instance); in nvme_init_subsystem()
2773 device_initialize(&subsys->dev); in nvme_init_subsystem()
2776 found = __nvme_find_get_subsystem(subsys->subnqn); in nvme_init_subsystem()
2778 put_device(&subsys->dev); in nvme_init_subsystem()
2779 subsys = found; in nvme_init_subsystem()
2781 if (!nvme_validate_cntlid(subsys, ctrl, id)) { in nvme_init_subsystem()
2786 ret = device_add(&subsys->dev); in nvme_init_subsystem()
2790 put_device(&subsys->dev); in nvme_init_subsystem()
2793 ida_init(&subsys->ns_ida); in nvme_init_subsystem()
2794 list_add_tail(&subsys->entry, &nvme_subsystems); in nvme_init_subsystem()
2797 ret = sysfs_create_link(&subsys->dev.kobj, &ctrl->device->kobj, in nvme_init_subsystem()
2806 subsys->instance = ctrl->instance; in nvme_init_subsystem()
2807 ctrl->subsys = subsys; in nvme_init_subsystem()
2808 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls); in nvme_init_subsystem()
2813 nvme_put_subsystem(subsys); in nvme_init_subsystem()
3211 struct nvme_subsystem *subsys = head->subsys; in wwid_show() local
3212 int serial_len = sizeof(subsys->serial); in wwid_show()
3213 int model_len = sizeof(subsys->model); in wwid_show()
3224 while (serial_len > 0 && (subsys->serial[serial_len - 1] == ' ' || in wwid_show()
3225 subsys->serial[serial_len - 1] == '\0')) in wwid_show()
3227 while (model_len > 0 && (subsys->model[model_len - 1] == ' ' || in wwid_show()
3228 subsys->model[model_len - 1] == '\0')) in wwid_show()
3231 return sysfs_emit(buf, "nvme.%04x-%*phN-%*phN-%08x\n", subsys->vendor_id, in wwid_show()
3232 serial_len, subsys->serial, model_len, subsys->model, in wwid_show()
3334 (int)sizeof(ctrl->subsys->field), ctrl->subsys->field); \
3409 return sysfs_emit(buf, "%s\n", ctrl->subsys->subnqn); in nvme_sysfs_show_subsysnqn()
3591 static struct nvme_ns_head *nvme_find_ns_head(struct nvme_subsystem *subsys, in nvme_find_ns_head() argument
3596 lockdep_assert_held(&subsys->lock); in nvme_find_ns_head()
3598 list_for_each_entry(h, &subsys->nsheads, entry) { in nvme_find_ns_head()
3608 static int __nvme_check_ids(struct nvme_subsystem *subsys, in __nvme_check_ids() argument
3613 lockdep_assert_held(&subsys->lock); in __nvme_check_ids()
3615 list_for_each_entry(h, &subsys->nsheads, entry) { in __nvme_check_ids()
3703 ret = ida_simple_get(&ctrl->subsys->ns_ida, 1, 0, GFP_KERNEL); in nvme_alloc_ns_head()
3711 head->subsys = ctrl->subsys; in nvme_alloc_ns_head()
3716 ret = __nvme_check_ids(ctrl->subsys, head); in nvme_alloc_ns_head()
3734 list_add_tail(&head->entry, &ctrl->subsys->nsheads); in nvme_alloc_ns_head()
3736 kref_get(&ctrl->subsys->ref); in nvme_alloc_ns_head()
3742 ida_simple_remove(&ctrl->subsys->ns_ida, head->instance); in nvme_alloc_ns_head()
3758 mutex_lock(&ctrl->subsys->lock); in nvme_init_ns_head()
3759 head = nvme_find_ns_head(ctrl->subsys, nsid); in nvme_init_ns_head()
3784 mutex_unlock(&ctrl->subsys->lock); in nvme_init_ns_head()
3790 mutex_unlock(&ctrl->subsys->lock); in nvme_init_ns_head()
3902 mutex_lock(&ctrl->subsys->lock); in nvme_alloc_ns()
3906 mutex_unlock(&ctrl->subsys->lock); in nvme_alloc_ns()
3927 mutex_lock(&ns->ctrl->subsys->lock); in nvme_ns_remove()
3933 mutex_unlock(&ns->ctrl->subsys->lock); in nvme_ns_remove()
4436 struct nvme_subsystem *subsys = ctrl->subsys; in nvme_free_ctrl() local
4438 if (!subsys || ctrl->instance != subsys->instance) in nvme_free_ctrl()
4445 if (subsys) { in nvme_free_ctrl()
4448 sysfs_remove_link(&subsys->dev.kobj, dev_name(ctrl->device)); in nvme_free_ctrl()
4454 if (subsys) in nvme_free_ctrl()
4455 nvme_put_subsystem(subsys); in nvme_free_ctrl()