Lines Matching refs:ns

442 	req->ns = xa_load(&subsys->namespaces, nsid);
443 if (unlikely(!req->ns)) {
450 percpu_ref_get(&req->ns->ref);
456 struct nvmet_ns *ns = container_of(ref, struct nvmet_ns, ref);
458 complete(&ns->disable_done);
461 void nvmet_put_namespace(struct nvmet_ns *ns)
463 percpu_ref_put(&ns->ref);
466 static void nvmet_ns_dev_disable(struct nvmet_ns *ns)
468 nvmet_bdev_ns_disable(ns);
469 nvmet_file_ns_disable(ns);
472 static int nvmet_p2pmem_ns_enable(struct nvmet_ns *ns)
477 if (!ns->use_p2pmem)
480 if (!ns->bdev) {
485 if (!blk_queue_pci_p2pdma(ns->bdev->bd_disk->queue)) {
487 ns->device_path);
491 if (ns->p2p_dev) {
492 ret = pci_p2pdma_distance(ns->p2p_dev, nvmet_ns_dev(ns), true);
503 p2p_dev = pci_p2pmem_find(nvmet_ns_dev(ns));
506 ns->device_path);
520 struct nvmet_ns *ns)
526 if (!ctrl->p2p_client || !ns->use_p2pmem)
529 if (ns->p2p_dev) {
530 ret = pci_p2pdma_distance(ns->p2p_dev, ctrl->p2p_client, true);
534 p2p_dev = pci_dev_get(ns->p2p_dev);
537 clients[1] = nvmet_ns_dev(ns);
542 dev_name(ctrl->p2p_client), ns->device_path);
547 ret = radix_tree_insert(&ctrl->p2p_ns_map, ns->nsid, p2p_dev);
552 ns->nsid);
555 bool nvmet_ns_revalidate(struct nvmet_ns *ns)
557 loff_t oldsize = ns->size;
559 if (ns->bdev)
560 nvmet_bdev_ns_revalidate(ns);
562 nvmet_file_ns_revalidate(ns);
564 return oldsize != ns->size;
567 int nvmet_ns_enable(struct nvmet_ns *ns)
569 struct nvmet_subsys *subsys = ns->subsys;
581 if (ns->enabled)
588 ret = nvmet_bdev_ns_enable(ns);
590 ret = nvmet_file_ns_enable(ns);
594 ret = nvmet_p2pmem_ns_enable(ns);
599 nvmet_p2pmem_ns_add_p2p(ctrl, ns);
601 ret = percpu_ref_init(&ns->ref, nvmet_destroy_namespace,
606 if (ns->nsid > subsys->max_nsid)
607 subsys->max_nsid = ns->nsid;
609 ret = xa_insert(&subsys->namespaces, ns->nsid, ns, GFP_KERNEL);
615 nvmet_ns_changed(subsys, ns->nsid);
616 ns->enabled = true;
624 percpu_ref_exit(&ns->ref);
627 pci_dev_put(radix_tree_delete(&ctrl->p2p_ns_map, ns->nsid));
629 nvmet_ns_dev_disable(ns);
633 void nvmet_ns_disable(struct nvmet_ns *ns)
635 struct nvmet_subsys *subsys = ns->subsys;
639 if (!ns->enabled)
642 ns->enabled = false;
643 xa_erase(&ns->subsys->namespaces, ns->nsid);
644 if (ns->nsid == subsys->max_nsid)
648 pci_dev_put(radix_tree_delete(&ctrl->p2p_ns_map, ns->nsid));
660 percpu_ref_kill(&ns->ref);
662 wait_for_completion(&ns->disable_done);
663 percpu_ref_exit(&ns->ref);
668 nvmet_ns_changed(subsys, ns->nsid);
669 nvmet_ns_dev_disable(ns);
674 void nvmet_ns_free(struct nvmet_ns *ns)
676 nvmet_ns_disable(ns);
679 nvmet_ana_group_enabled[ns->anagrpid]--;
682 kfree(ns->device_path);
683 kfree(ns);
688 struct nvmet_ns *ns;
690 ns = kzalloc(sizeof(*ns), GFP_KERNEL);
691 if (!ns)
694 init_completion(&ns->disable_done);
696 ns->nsid = nsid;
697 ns->subsys = subsys;
700 ns->anagrpid = NVMET_DEFAULT_ANA_GRPID;
701 nvmet_ana_group_enabled[ns->anagrpid]++;
704 uuid_gen(&ns->uuid);
705 ns->buffered_io = false;
706 ns->csi = NVME_CSI_NVM;
708 return ns;
755 struct nvmet_ns *ns = req->ns;
768 if (ns)
769 nvmet_put_namespace(ns);
870 struct nvmet_ns *ns)
872 enum nvme_ana_state state = port->ana_state[ns->anagrpid];
885 if (unlikely(req->ns->readonly)) {
920 ret = nvmet_check_ana_state(req->port, req->ns);
931 switch (req->ns->csi) {
933 if (req->ns->file)
963 req->ns = NULL;
1017 if (req->ns)
1018 nvmet_put_namespace(req->ns);
1077 !req->sq->ctrl || !req->sq->qid || !req->ns)
1079 return radix_tree_lookup(&req->sq->ctrl->p2p_ns_map, req->ns->nsid);
1349 struct nvmet_ns *ns;
1357 xa_for_each(&ctrl->subsys->namespaces, idx, ns)
1358 nvmet_p2pmem_ns_add_p2p(ctrl, ns);