Lines Matching refs:subsys

117 static u32 nvmet_max_nsid(struct nvmet_subsys *subsys)  in nvmet_max_nsid()  argument
123 nvmet_for_each_enabled_ns(&subsys->namespaces, idx, cur) in nvmet_max_nsid()
235 void nvmet_ns_changed(struct nvmet_subsys *subsys, u32 nsid) in nvmet_ns_changed() argument
239 lockdep_assert_held(&subsys->lock); in nvmet_ns_changed()
241 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_ns_changed()
251 void nvmet_send_ana_event(struct nvmet_subsys *subsys, in nvmet_send_ana_event() argument
256 mutex_lock(&subsys->lock); in nvmet_send_ana_event()
257 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_send_ana_event()
265 mutex_unlock(&subsys->lock); in nvmet_send_ana_event()
274 nvmet_send_ana_event(p->subsys, port); in nvmet_port_send_ana_event()
301 void nvmet_port_del_ctrls(struct nvmet_port *port, struct nvmet_subsys *subsys) in nvmet_port_del_ctrls() argument
305 mutex_lock(&subsys->lock); in nvmet_port_del_ctrls()
306 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_port_del_ctrls()
310 mutex_unlock(&subsys->lock); in nvmet_port_del_ctrls()
437 struct nvmet_subsys *subsys = nvmet_req_subsys(req); in nvmet_req_find_ns() local
439 req->ns = xa_load(&subsys->namespaces, nsid); in nvmet_req_find_ns()
569 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_enable() local
573 mutex_lock(&subsys->lock); in nvmet_ns_enable()
576 if (nvmet_is_passthru_subsys(subsys)) { in nvmet_ns_enable()
594 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_enable()
606 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_enable()
608 xa_set_mark(&subsys->namespaces, ns->nsid, NVMET_NS_ENABLED); in nvmet_ns_enable()
611 mutex_unlock(&subsys->lock); in nvmet_ns_enable()
617 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_enable()
626 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_disable() local
629 mutex_lock(&subsys->lock); in nvmet_ns_disable()
634 xa_clear_mark(&subsys->namespaces, ns->nsid, NVMET_NS_ENABLED); in nvmet_ns_disable()
636 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_disable()
639 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
657 mutex_lock(&subsys->lock); in nvmet_ns_disable()
658 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_disable()
661 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
666 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_free() local
670 mutex_lock(&subsys->lock); in nvmet_ns_free()
672 xa_erase(&subsys->namespaces, ns->nsid); in nvmet_ns_free()
673 if (ns->nsid == subsys->max_nsid) in nvmet_ns_free()
674 subsys->max_nsid = nvmet_max_nsid(subsys); in nvmet_ns_free()
676 subsys->nr_namespaces--; in nvmet_ns_free()
677 mutex_unlock(&subsys->lock); in nvmet_ns_free()
687 struct nvmet_ns *nvmet_ns_alloc(struct nvmet_subsys *subsys, u32 nsid) in nvmet_ns_alloc() argument
691 mutex_lock(&subsys->lock); in nvmet_ns_alloc()
693 if (subsys->nr_namespaces == NVMET_MAX_NAMESPACES) in nvmet_ns_alloc()
703 ns->subsys = subsys; in nvmet_ns_alloc()
705 if (ns->nsid > subsys->max_nsid) in nvmet_ns_alloc()
706 subsys->max_nsid = nsid; in nvmet_ns_alloc()
708 if (xa_insert(&subsys->namespaces, ns->nsid, ns, GFP_KERNEL)) in nvmet_ns_alloc()
711 subsys->nr_namespaces++; in nvmet_ns_alloc()
713 mutex_unlock(&subsys->lock); in nvmet_ns_alloc()
726 subsys->max_nsid = nvmet_max_nsid(subsys); in nvmet_ns_alloc()
729 mutex_unlock(&subsys->lock); in nvmet_ns_alloc()
868 if (cqid > ctrl->subsys->max_qid) in nvmet_check_cqid()
916 if (sqid > ctrl->subsys->max_qid) in nvmet_check_sqid()
1383 if (!nvmet_is_disc_subsys(ctrl->subsys) && in nvmet_start_ctrl()
1455 if (nvmet_is_passthru_subsys(ctrl->subsys)) in nvmet_init_cap()
1464 struct nvmet_subsys *subsys; in nvmet_ctrl_find_get() local
1466 subsys = nvmet_find_get_subsys(req->port, subsysnqn); in nvmet_ctrl_find_get()
1467 if (!subsys) { in nvmet_ctrl_find_get()
1474 mutex_lock(&subsys->lock); in nvmet_ctrl_find_get()
1475 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_ctrl_find_get()
1495 mutex_unlock(&subsys->lock); in nvmet_ctrl_find_get()
1496 nvmet_subsys_put(subsys); in nvmet_ctrl_find_get()
1522 bool nvmet_host_allowed(struct nvmet_subsys *subsys, const char *hostnqn) in nvmet_host_allowed() argument
1528 if (subsys->allow_any_host) in nvmet_host_allowed()
1531 if (nvmet_is_disc_subsys(subsys)) /* allow all access to disc subsys */ in nvmet_host_allowed()
1534 list_for_each_entry(p, &subsys->hosts, entry) { in nvmet_host_allowed()
1556 nvmet_for_each_enabled_ns(&ctrl->subsys->namespaces, idx, ns) in nvmet_setup_p2p_ns_map()
1585 struct nvmet_subsys *subsys; in nvmet_alloc_ctrl() local
1592 subsys = nvmet_find_get_subsys(args->port, args->subsysnqn); in nvmet_alloc_ctrl()
1593 if (!subsys) { in nvmet_alloc_ctrl()
1602 if (!nvmet_host_allowed(subsys, args->hostnqn)) { in nvmet_alloc_ctrl()
1625 subsys->clear_ids = 1; in nvmet_alloc_ctrl()
1638 ctrl->subsys = subsys; in nvmet_alloc_ctrl()
1639 ctrl->pi_support = ctrl->port->pi_enable && ctrl->subsys->pi_support; in nvmet_alloc_ctrl()
1648 ctrl->sqs = kcalloc(subsys->max_qid + 1, in nvmet_alloc_ctrl()
1654 ctrl->cqs = kcalloc(subsys->max_qid + 1, sizeof(struct nvmet_cq *), in nvmet_alloc_ctrl()
1660 subsys->cntlid_min, subsys->cntlid_max, in nvmet_alloc_ctrl()
1672 if (nvmet_is_disc_subsys(ctrl->subsys) && !kato) in nvmet_alloc_ctrl()
1683 mutex_lock(&subsys->lock); in nvmet_alloc_ctrl()
1687 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls); in nvmet_alloc_ctrl()
1690 mutex_unlock(&subsys->lock); in nvmet_alloc_ctrl()
1711 nvmet_is_disc_subsys(ctrl->subsys) ? "discovery" : "nvm", in nvmet_alloc_ctrl()
1712 ctrl->cntlid, ctrl->subsys->subsysnqn, ctrl->hostnqn, in nvmet_alloc_ctrl()
1720 mutex_unlock(&subsys->lock); in nvmet_alloc_ctrl()
1732 nvmet_subsys_put(subsys); in nvmet_alloc_ctrl()
1740 struct nvmet_subsys *subsys = ctrl->subsys; in nvmet_ctrl_free() local
1742 mutex_lock(&subsys->lock); in nvmet_ctrl_free()
1746 mutex_unlock(&subsys->lock); in nvmet_ctrl_free()
1765 nvmet_subsys_put(subsys); in nvmet_ctrl_free()
1816 if (!strncmp(p->subsys->subsysnqn, subsysnqn, in nvmet_find_get_subsys()
1818 if (!kref_get_unless_zero(&p->subsys->ref)) in nvmet_find_get_subsys()
1821 return p->subsys; in nvmet_find_get_subsys()
1831 struct nvmet_subsys *subsys; in nvmet_subsys_alloc() local
1835 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL); in nvmet_subsys_alloc()
1836 if (!subsys) in nvmet_subsys_alloc()
1839 subsys->ver = NVMET_DEFAULT_VS; in nvmet_subsys_alloc()
1842 bin2hex(subsys->serial, &serial, sizeof(serial)); in nvmet_subsys_alloc()
1844 subsys->model_number = kstrdup(NVMET_DEFAULT_CTRL_MODEL, GFP_KERNEL); in nvmet_subsys_alloc()
1845 if (!subsys->model_number) { in nvmet_subsys_alloc()
1850 subsys->ieee_oui = 0; in nvmet_subsys_alloc()
1852 subsys->firmware_rev = kstrndup(UTS_RELEASE, NVMET_FR_MAX_SIZE, GFP_KERNEL); in nvmet_subsys_alloc()
1853 if (!subsys->firmware_rev) { in nvmet_subsys_alloc()
1860 subsys->max_qid = NVMET_NR_QUEUES; in nvmet_subsys_alloc()
1864 subsys->max_qid = 0; in nvmet_subsys_alloc()
1871 subsys->type = type; in nvmet_subsys_alloc()
1872 subsys->subsysnqn = kstrndup(subsysnqn, NVMF_NQN_SIZE, in nvmet_subsys_alloc()
1874 if (!subsys->subsysnqn) { in nvmet_subsys_alloc()
1878 subsys->cntlid_min = NVME_CNTLID_MIN; in nvmet_subsys_alloc()
1879 subsys->cntlid_max = NVME_CNTLID_MAX; in nvmet_subsys_alloc()
1880 kref_init(&subsys->ref); in nvmet_subsys_alloc()
1882 mutex_init(&subsys->lock); in nvmet_subsys_alloc()
1883 xa_init(&subsys->namespaces); in nvmet_subsys_alloc()
1884 INIT_LIST_HEAD(&subsys->ctrls); in nvmet_subsys_alloc()
1885 INIT_LIST_HEAD(&subsys->hosts); in nvmet_subsys_alloc()
1887 ret = nvmet_debugfs_subsys_setup(subsys); in nvmet_subsys_alloc()
1891 return subsys; in nvmet_subsys_alloc()
1894 kfree(subsys->subsysnqn); in nvmet_subsys_alloc()
1896 kfree(subsys->firmware_rev); in nvmet_subsys_alloc()
1898 kfree(subsys->model_number); in nvmet_subsys_alloc()
1900 kfree(subsys); in nvmet_subsys_alloc()
1906 struct nvmet_subsys *subsys = in nvmet_subsys_free() local
1909 WARN_ON_ONCE(!xa_empty(&subsys->namespaces)); in nvmet_subsys_free()
1911 nvmet_debugfs_subsys_free(subsys); in nvmet_subsys_free()
1913 xa_destroy(&subsys->namespaces); in nvmet_subsys_free()
1914 nvmet_passthru_subsys_free(subsys); in nvmet_subsys_free()
1916 kfree(subsys->subsysnqn); in nvmet_subsys_free()
1917 kfree(subsys->model_number); in nvmet_subsys_free()
1918 kfree(subsys->firmware_rev); in nvmet_subsys_free()
1919 kfree(subsys); in nvmet_subsys_free()
1922 void nvmet_subsys_del_ctrls(struct nvmet_subsys *subsys) in nvmet_subsys_del_ctrls() argument
1926 mutex_lock(&subsys->lock); in nvmet_subsys_del_ctrls()
1927 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_subsys_del_ctrls()
1929 mutex_unlock(&subsys->lock); in nvmet_subsys_del_ctrls()
1932 void nvmet_subsys_put(struct nvmet_subsys *subsys) in nvmet_subsys_put() argument
1934 kref_put(&subsys->ref, nvmet_subsys_free); in nvmet_subsys_put()