Lines Matching refs:subsys

116 static unsigned int nvmet_max_nsid(struct nvmet_subsys *subsys)  in nvmet_max_nsid()  argument
122 xa_for_each(&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()
424 ns = xa_load(&ctrl->subsys->namespaces, le32_to_cpu(nsid)); in nvmet_find_namespace()
542 nvmet_ns_changed(ns->subsys, ns->nsid); in nvmet_ns_revalidate()
547 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_enable() local
551 mutex_lock(&subsys->lock); in nvmet_ns_enable()
554 if (nvmet_passthru_ctrl(subsys)) { in nvmet_ns_enable()
563 if (subsys->nr_namespaces == NVMET_MAX_NAMESPACES) in nvmet_ns_enable()
576 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_enable()
584 if (ns->nsid > subsys->max_nsid) in nvmet_ns_enable()
585 subsys->max_nsid = ns->nsid; in nvmet_ns_enable()
587 ret = xa_insert(&subsys->namespaces, ns->nsid, ns, GFP_KERNEL); in nvmet_ns_enable()
591 subsys->nr_namespaces++; in nvmet_ns_enable()
593 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_enable()
597 mutex_unlock(&subsys->lock); in nvmet_ns_enable()
601 subsys->max_nsid = nvmet_max_nsid(subsys); in nvmet_ns_enable()
604 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_enable()
613 struct nvmet_subsys *subsys = ns->subsys; in nvmet_ns_disable() local
616 mutex_lock(&subsys->lock); in nvmet_ns_disable()
621 xa_erase(&ns->subsys->namespaces, ns->nsid); in nvmet_ns_disable()
622 if (ns->nsid == subsys->max_nsid) in nvmet_ns_disable()
623 subsys->max_nsid = nvmet_max_nsid(subsys); in nvmet_ns_disable()
625 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_ns_disable()
628 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
643 mutex_lock(&subsys->lock); in nvmet_ns_disable()
645 subsys->nr_namespaces--; in nvmet_ns_disable()
646 nvmet_ns_changed(subsys, ns->nsid); in nvmet_ns_disable()
649 mutex_unlock(&subsys->lock); in nvmet_ns_disable()
664 struct nvmet_ns *nvmet_ns_alloc(struct nvmet_subsys *subsys, u32 nsid) in nvmet_ns_alloc() argument
675 ns->subsys = subsys; in nvmet_ns_alloc()
1176 struct nvmet_subsys *subsys; in nvmet_ctrl_find_get() local
1180 subsys = nvmet_find_get_subsys(req->port, subsysnqn); in nvmet_ctrl_find_get()
1181 if (!subsys) { in nvmet_ctrl_find_get()
1188 mutex_lock(&subsys->lock); in nvmet_ctrl_find_get()
1189 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvmet_ctrl_find_get()
1209 mutex_unlock(&subsys->lock); in nvmet_ctrl_find_get()
1210 nvmet_subsys_put(subsys); in nvmet_ctrl_find_get()
1230 bool nvmet_host_allowed(struct nvmet_subsys *subsys, const char *hostnqn) in nvmet_host_allowed() argument
1236 if (subsys->allow_any_host) in nvmet_host_allowed()
1239 if (subsys->type == NVME_NQN_DISC) /* allow all access to disc subsys */ in nvmet_host_allowed()
1242 list_for_each_entry(p, &subsys->hosts, entry) { in nvmet_host_allowed()
1264 xa_for_each(&ctrl->subsys->namespaces, idx, ns) in nvmet_setup_p2p_ns_map()
1294 struct nvmet_subsys *subsys; in nvmet_alloc_ctrl() local
1300 subsys = nvmet_find_get_subsys(req->port, subsysnqn); in nvmet_alloc_ctrl()
1301 if (!subsys) { in nvmet_alloc_ctrl()
1310 if (!nvmet_host_allowed(subsys, hostnqn)) { in nvmet_alloc_ctrl()
1339 ctrl->subsys = subsys; in nvmet_alloc_ctrl()
1347 ctrl->cqs = kcalloc(subsys->max_qid + 1, in nvmet_alloc_ctrl()
1353 ctrl->sqs = kcalloc(subsys->max_qid + 1, in nvmet_alloc_ctrl()
1359 if (subsys->cntlid_min > subsys->cntlid_max) in nvmet_alloc_ctrl()
1363 subsys->cntlid_min, subsys->cntlid_max, in nvmet_alloc_ctrl()
1377 if ((ctrl->subsys->type == NVME_NQN_DISC) && !kato) in nvmet_alloc_ctrl()
1388 mutex_lock(&subsys->lock); in nvmet_alloc_ctrl()
1389 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls); in nvmet_alloc_ctrl()
1391 mutex_unlock(&subsys->lock); in nvmet_alloc_ctrl()
1405 nvmet_subsys_put(subsys); in nvmet_alloc_ctrl()
1413 struct nvmet_subsys *subsys = ctrl->subsys; in nvmet_ctrl_free() local
1415 mutex_lock(&subsys->lock); in nvmet_ctrl_free()
1418 mutex_unlock(&subsys->lock); in nvmet_ctrl_free()
1433 nvmet_subsys_put(subsys); in nvmet_ctrl_free()
1468 if (!strncmp(p->subsys->subsysnqn, subsysnqn, in nvmet_find_get_subsys()
1470 if (!kref_get_unless_zero(&p->subsys->ref)) in nvmet_find_get_subsys()
1473 return p->subsys; in nvmet_find_get_subsys()
1483 struct nvmet_subsys *subsys; in nvmet_subsys_alloc() local
1485 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL); in nvmet_subsys_alloc()
1486 if (!subsys) in nvmet_subsys_alloc()
1489 subsys->ver = NVMET_DEFAULT_VS; in nvmet_subsys_alloc()
1491 get_random_bytes(&subsys->serial, sizeof(subsys->serial)); in nvmet_subsys_alloc()
1495 subsys->max_qid = NVMET_NR_QUEUES; in nvmet_subsys_alloc()
1498 subsys->max_qid = 0; in nvmet_subsys_alloc()
1502 kfree(subsys); in nvmet_subsys_alloc()
1505 subsys->type = type; in nvmet_subsys_alloc()
1506 subsys->subsysnqn = kstrndup(subsysnqn, NVMF_NQN_SIZE, in nvmet_subsys_alloc()
1508 if (!subsys->subsysnqn) { in nvmet_subsys_alloc()
1509 kfree(subsys); in nvmet_subsys_alloc()
1512 subsys->cntlid_min = NVME_CNTLID_MIN; in nvmet_subsys_alloc()
1513 subsys->cntlid_max = NVME_CNTLID_MAX; in nvmet_subsys_alloc()
1514 kref_init(&subsys->ref); in nvmet_subsys_alloc()
1516 mutex_init(&subsys->lock); in nvmet_subsys_alloc()
1517 xa_init(&subsys->namespaces); in nvmet_subsys_alloc()
1518 INIT_LIST_HEAD(&subsys->ctrls); in nvmet_subsys_alloc()
1519 INIT_LIST_HEAD(&subsys->hosts); in nvmet_subsys_alloc()
1521 return subsys; in nvmet_subsys_alloc()
1526 struct nvmet_subsys *subsys = in nvmet_subsys_free() local
1529 WARN_ON_ONCE(!xa_empty(&subsys->namespaces)); in nvmet_subsys_free()
1531 xa_destroy(&subsys->namespaces); in nvmet_subsys_free()
1532 nvmet_passthru_subsys_free(subsys); in nvmet_subsys_free()
1534 kfree(subsys->subsysnqn); in nvmet_subsys_free()
1535 kfree_rcu(subsys->model, rcuhead); in nvmet_subsys_free()
1536 kfree(subsys); in nvmet_subsys_free()
1539 void nvmet_subsys_del_ctrls(struct nvmet_subsys *subsys) in nvmet_subsys_del_ctrls() argument
1543 mutex_lock(&subsys->lock); in nvmet_subsys_del_ctrls()
1544 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) in nvmet_subsys_del_ctrls()
1546 mutex_unlock(&subsys->lock); in nvmet_subsys_del_ctrls()
1549 void nvmet_subsys_put(struct nvmet_subsys *subsys) in nvmet_subsys_put() argument
1551 kref_put(&subsys->ref, nvmet_subsys_free); in nvmet_subsys_put()