Lines Matching refs:subsys

72 static unsigned int nvmet_max_nsid(struct nvmet_subsys *subsys)  in nvmet_max_nsid()  argument
76 if (list_empty(&subsys->namespaces)) in nvmet_max_nsid()
79 ns = list_last_entry(&subsys->namespaces, struct nvmet_ns, dev_link); in nvmet_max_nsid()
183 void nvmet_ns_changed(struct nvmet_subsys *subsys, u32 nsid) in nvmet_ns_changed() argument
187 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_ns_changed()
197 void nvmet_send_ana_event(struct nvmet_subsys *subsys, in nvmet_send_ana_event() argument
202 mutex_lock(&subsys->lock); in nvmet_send_ana_event()
203 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_send_ana_event()
211 mutex_unlock(&subsys->lock); in nvmet_send_ana_event()
220 nvmet_send_ana_event(p->subsys, port); in nvmet_port_send_ana_event()
329 list_for_each_entry_rcu(ns, &ctrl->subsys->namespaces, dev_link) { in __nvmet_find_namespace()
370 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_enable() local
373 mutex_lock(&subsys->lock); in nvmet_ns_enable()
375 if (subsys->nr_namespaces == NVMET_MAX_NAMESPACES) in nvmet_ns_enable()
392 if (ns->nsid > subsys->max_nsid) in nvmet_ns_enable()
393 subsys->max_nsid = ns->nsid; in nvmet_ns_enable()
399 if (list_empty(&subsys->namespaces)) { in nvmet_ns_enable()
400 list_add_tail_rcu(&ns->dev_link, &subsys->namespaces); in nvmet_ns_enable()
404 list_for_each_entry_rcu(old, &subsys->namespaces, dev_link) { in nvmet_ns_enable()
412 subsys->nr_namespaces++; in nvmet_ns_enable()
414 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_enable()
418 mutex_unlock(&subsys->lock); in nvmet_ns_enable()
427 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_disable() local
429 mutex_lock(&subsys->lock); in nvmet_ns_disable()
435 if (ns->nsid == subsys->max_nsid) in nvmet_ns_disable()
436 subsys->max_nsid = nvmet_max_nsid(subsys); in nvmet_ns_disable()
437 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
452 mutex_lock(&subsys->lock); in nvmet_ns_disable()
453 subsys->nr_namespaces--; in nvmet_ns_disable()
454 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_disable()
457 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
472 struct nvmet_ns *nvmet_ns_alloc(struct nvmet_subsys *subsys, u32 nsid) in nvmet_ns_alloc() argument
484 ns->subsys = subsys; in nvmet_ns_alloc()
690 else if (req->sq->ctrl->subsys->type == NVME_NQN_DISC) in nvmet_req_init()
830 struct nvmet_subsys *subsys; in nvmet_ctrl_find_get() local
834 subsys = nvmet_find_get_subsys(req->port, subsysnqn); in nvmet_ctrl_find_get()
835 if (!subsys) { in nvmet_ctrl_find_get()
842 mutex_lock(&subsys->lock); in nvmet_ctrl_find_get()
843 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_ctrl_find_get()
863 mutex_unlock(&subsys->lock); in nvmet_ctrl_find_get()
864 nvmet_subsys_put(subsys); in nvmet_ctrl_find_get()
884 static bool __nvmet_host_allowed(struct nvmet_subsys *subsys, in __nvmet_host_allowed() argument
889 if (subsys->allow_any_host) in __nvmet_host_allowed()
892 list_for_each_entry(p, &subsys->hosts, entry) { in __nvmet_host_allowed()
906 if (__nvmet_host_allowed(s->subsys, hostnqn)) in nvmet_host_discovery_allowed()
913 bool nvmet_host_allowed(struct nvmet_req *req, struct nvmet_subsys *subsys, in nvmet_host_allowed() argument
918 if (subsys->type == NVME_NQN_DISC) in nvmet_host_allowed()
921 return __nvmet_host_allowed(subsys, hostnqn); in nvmet_host_allowed()
927 struct nvmet_subsys *subsys; in nvmet_alloc_ctrl() local
933 subsys = nvmet_find_get_subsys(req->port, subsysnqn); in nvmet_alloc_ctrl()
934 if (!subsys) { in nvmet_alloc_ctrl()
943 if (!nvmet_host_allowed(req, subsys, hostnqn)) { in nvmet_alloc_ctrl()
970 ctrl->subsys = subsys; in nvmet_alloc_ctrl()
978 ctrl->cqs = kcalloc(subsys->max_qid + 1, in nvmet_alloc_ctrl()
984 ctrl->sqs = kcalloc(subsys->max_qid + 1, in nvmet_alloc_ctrl()
1000 if (ctrl->subsys->type == NVME_NQN_DISC) { in nvmet_alloc_ctrl()
1027 mutex_lock(&subsys->lock); in nvmet_alloc_ctrl()
1028 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls); in nvmet_alloc_ctrl()
1029 mutex_unlock(&subsys->lock); in nvmet_alloc_ctrl()
1045 nvmet_subsys_put(subsys); in nvmet_alloc_ctrl()
1053 struct nvmet_subsys *subsys = ctrl->subsys; in nvmet_ctrl_free() local
1055 mutex_lock(&subsys->lock); in nvmet_ctrl_free()
1057 mutex_unlock(&subsys->lock); in nvmet_ctrl_free()
1071 nvmet_subsys_put(subsys); in nvmet_ctrl_free()
1117 if (!strncmp(p->subsys->subsysnqn, subsysnqn, in nvmet_find_get_subsys()
1119 if (!kref_get_unless_zero(&p->subsys->ref)) in nvmet_find_get_subsys()
1122 return p->subsys; in nvmet_find_get_subsys()
1132 struct nvmet_subsys *subsys; in nvmet_subsys_alloc() local
1134 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL); in nvmet_subsys_alloc()
1135 if (!subsys) in nvmet_subsys_alloc()
1138 subsys->ver = NVME_VS(1, 3, 0); /* NVMe 1.3.0 */ in nvmet_subsys_alloc()
1140 get_random_bytes(&subsys->serial, sizeof(subsys->serial)); in nvmet_subsys_alloc()
1144 subsys->max_qid = NVMET_NR_QUEUES; in nvmet_subsys_alloc()
1147 subsys->max_qid = 0; in nvmet_subsys_alloc()
1151 kfree(subsys); in nvmet_subsys_alloc()
1154 subsys->type = type; in nvmet_subsys_alloc()
1155 subsys->subsysnqn = kstrndup(subsysnqn, NVMF_NQN_SIZE, in nvmet_subsys_alloc()
1157 if (!subsys->subsysnqn) { in nvmet_subsys_alloc()
1158 kfree(subsys); in nvmet_subsys_alloc()
1162 kref_init(&subsys->ref); in nvmet_subsys_alloc()
1164 mutex_init(&subsys->lock); in nvmet_subsys_alloc()
1165 INIT_LIST_HEAD(&subsys->namespaces); in nvmet_subsys_alloc()
1166 INIT_LIST_HEAD(&subsys->ctrls); in nvmet_subsys_alloc()
1167 INIT_LIST_HEAD(&subsys->hosts); in nvmet_subsys_alloc()
1169 return subsys; in nvmet_subsys_alloc()
1174 struct nvmet_subsys *subsys = in nvmet_subsys_free() local
1177 WARN_ON_ONCE(!list_empty(&subsys->namespaces)); in nvmet_subsys_free()
1179 kfree(subsys->subsysnqn); in nvmet_subsys_free()
1180 kfree(subsys); in nvmet_subsys_free()
1183 void nvmet_subsys_del_ctrls(struct nvmet_subsys *subsys) in nvmet_subsys_del_ctrls() argument
1187 mutex_lock(&subsys->lock); in nvmet_subsys_del_ctrls()
1188 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_subsys_del_ctrls()
1190 mutex_unlock(&subsys->lock); in nvmet_subsys_del_ctrls()
1193 void nvmet_subsys_put(struct nvmet_subsys *subsys) in nvmet_subsys_put() argument
1195 kref_put(&subsys->ref, nvmet_subsys_free); in nvmet_subsys_put()