Lines Matching refs:subsys
116 static unsigned int nvmet_max_nsid(struct nvmet_subsys *subsys) in nvmet_max_nsid() argument
120 if (list_empty(&subsys->namespaces)) in nvmet_max_nsid()
123 ns = list_last_entry(&subsys->namespaces, struct nvmet_ns, dev_link); in nvmet_max_nsid()
220 void nvmet_ns_changed(struct nvmet_subsys *subsys, u32 nsid) in nvmet_ns_changed() argument
224 lockdep_assert_held(&subsys->lock); in nvmet_ns_changed()
226 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_ns_changed()
236 void nvmet_send_ana_event(struct nvmet_subsys *subsys, in nvmet_send_ana_event() argument
241 mutex_lock(&subsys->lock); in nvmet_send_ana_event()
242 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_send_ana_event()
250 mutex_unlock(&subsys->lock); in nvmet_send_ana_event()
259 nvmet_send_ana_event(p->subsys, port); in nvmet_port_send_ana_event()
286 void nvmet_port_del_ctrls(struct nvmet_port *port, struct nvmet_subsys *subsys) in nvmet_port_del_ctrls() argument
290 mutex_lock(&subsys->lock); in nvmet_port_del_ctrls()
291 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_port_del_ctrls()
295 mutex_unlock(&subsys->lock); in nvmet_port_del_ctrls()
391 list_for_each_entry_rcu(ns, &ctrl->subsys->namespaces, dev_link) { in __nvmet_find_namespace()
515 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_enable() local
519 mutex_lock(&subsys->lock); in nvmet_ns_enable()
525 if (subsys->nr_namespaces == NVMET_MAX_NAMESPACES) in nvmet_ns_enable()
538 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_enable()
546 if (ns->nsid > subsys->max_nsid) in nvmet_ns_enable()
547 subsys->max_nsid = ns->nsid; in nvmet_ns_enable()
553 if (list_empty(&subsys->namespaces)) { in nvmet_ns_enable()
554 list_add_tail_rcu(&ns->dev_link, &subsys->namespaces); in nvmet_ns_enable()
558 list_for_each_entry_rcu(old, &subsys->namespaces, dev_link) { in nvmet_ns_enable()
566 subsys->nr_namespaces++; in nvmet_ns_enable()
568 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_enable()
572 mutex_unlock(&subsys->lock); in nvmet_ns_enable()
575 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_enable()
584 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_disable() local
587 mutex_lock(&subsys->lock); in nvmet_ns_disable()
593 if (ns->nsid == subsys->max_nsid) in nvmet_ns_disable()
594 subsys->max_nsid = nvmet_max_nsid(subsys); in nvmet_ns_disable()
596 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_disable()
599 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
614 mutex_lock(&subsys->lock); in nvmet_ns_disable()
616 subsys->nr_namespaces--; in nvmet_ns_disable()
617 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_disable()
620 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
635 struct nvmet_ns *nvmet_ns_alloc(struct nvmet_subsys *subsys, u32 nsid) in nvmet_ns_alloc() argument
647 ns->subsys = subsys; in nvmet_ns_alloc()
901 else if (req->sq->ctrl->subsys->type == NVME_NQN_DISC) in nvmet_req_init()
1090 struct nvmet_subsys *subsys; in nvmet_ctrl_find_get() local
1094 subsys = nvmet_find_get_subsys(req->port, subsysnqn); in nvmet_ctrl_find_get()
1095 if (!subsys) { in nvmet_ctrl_find_get()
1102 mutex_lock(&subsys->lock); in nvmet_ctrl_find_get()
1103 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_ctrl_find_get()
1123 mutex_unlock(&subsys->lock); in nvmet_ctrl_find_get()
1124 nvmet_subsys_put(subsys); in nvmet_ctrl_find_get()
1144 bool nvmet_host_allowed(struct nvmet_subsys *subsys, const char *hostnqn) in nvmet_host_allowed() argument
1150 if (subsys->allow_any_host) in nvmet_host_allowed()
1153 if (subsys->type == NVME_NQN_DISC) /* allow all access to disc subsys */ in nvmet_host_allowed()
1156 list_for_each_entry(p, &subsys->hosts, entry) { in nvmet_host_allowed()
1177 list_for_each_entry_rcu(ns, &ctrl->subsys->namespaces, dev_link) in nvmet_setup_p2p_ns_map()
1207 struct nvmet_subsys *subsys; in nvmet_alloc_ctrl() local
1213 subsys = nvmet_find_get_subsys(req->port, subsysnqn); in nvmet_alloc_ctrl()
1214 if (!subsys) { in nvmet_alloc_ctrl()
1223 if (!nvmet_host_allowed(subsys, hostnqn)) { in nvmet_alloc_ctrl()
1252 ctrl->subsys = subsys; in nvmet_alloc_ctrl()
1260 ctrl->cqs = kcalloc(subsys->max_qid + 1, in nvmet_alloc_ctrl()
1266 ctrl->sqs = kcalloc(subsys->max_qid + 1, in nvmet_alloc_ctrl()
1287 if ((ctrl->subsys->type == NVME_NQN_DISC) && !kato) in nvmet_alloc_ctrl()
1298 mutex_lock(&subsys->lock); in nvmet_alloc_ctrl()
1299 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls); in nvmet_alloc_ctrl()
1301 mutex_unlock(&subsys->lock); in nvmet_alloc_ctrl()
1315 nvmet_subsys_put(subsys); in nvmet_alloc_ctrl()
1323 struct nvmet_subsys *subsys = ctrl->subsys; in nvmet_ctrl_free() local
1325 mutex_lock(&subsys->lock); in nvmet_ctrl_free()
1328 mutex_unlock(&subsys->lock); in nvmet_ctrl_free()
1342 nvmet_subsys_put(subsys); in nvmet_ctrl_free()
1377 if (!strncmp(p->subsys->subsysnqn, subsysnqn, in nvmet_find_get_subsys()
1379 if (!kref_get_unless_zero(&p->subsys->ref)) in nvmet_find_get_subsys()
1382 return p->subsys; in nvmet_find_get_subsys()
1392 struct nvmet_subsys *subsys; in nvmet_subsys_alloc() local
1394 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL); in nvmet_subsys_alloc()
1395 if (!subsys) in nvmet_subsys_alloc()
1398 subsys->ver = NVME_VS(1, 3, 0); /* NVMe 1.3.0 */ in nvmet_subsys_alloc()
1400 get_random_bytes(&subsys->serial, sizeof(subsys->serial)); in nvmet_subsys_alloc()
1404 subsys->max_qid = NVMET_NR_QUEUES; in nvmet_subsys_alloc()
1407 subsys->max_qid = 0; in nvmet_subsys_alloc()
1411 kfree(subsys); in nvmet_subsys_alloc()
1414 subsys->type = type; in nvmet_subsys_alloc()
1415 subsys->subsysnqn = kstrndup(subsysnqn, NVMF_NQN_SIZE, in nvmet_subsys_alloc()
1417 if (!subsys->subsysnqn) { in nvmet_subsys_alloc()
1418 kfree(subsys); in nvmet_subsys_alloc()
1422 kref_init(&subsys->ref); in nvmet_subsys_alloc()
1424 mutex_init(&subsys->lock); in nvmet_subsys_alloc()
1425 INIT_LIST_HEAD(&subsys->namespaces); in nvmet_subsys_alloc()
1426 INIT_LIST_HEAD(&subsys->ctrls); in nvmet_subsys_alloc()
1427 INIT_LIST_HEAD(&subsys->hosts); in nvmet_subsys_alloc()
1429 return subsys; in nvmet_subsys_alloc()
1434 struct nvmet_subsys *subsys = in nvmet_subsys_free() local
1437 WARN_ON_ONCE(!list_empty(&subsys->namespaces)); in nvmet_subsys_free()
1439 kfree(subsys->subsysnqn); in nvmet_subsys_free()
1440 kfree(subsys); in nvmet_subsys_free()
1443 void nvmet_subsys_del_ctrls(struct nvmet_subsys *subsys) in nvmet_subsys_del_ctrls() argument
1447 mutex_lock(&subsys->lock); in nvmet_subsys_del_ctrls()
1448 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_subsys_del_ctrls()
1450 mutex_unlock(&subsys->lock); in nvmet_subsys_del_ctrls()
1453 void nvmet_subsys_put(struct nvmet_subsys *subsys) in nvmet_subsys_put() argument
1455 kref_put(&subsys->ref, nvmet_subsys_free); in nvmet_subsys_put()