Lines Matching defs:np
71 struct nvmft_port *np = arg;
73 sx_xlock(&np->lock);
74 np->online = true;
75 sx_xunlock(&np->lock);
81 struct nvmft_port *np = arg;
84 sx_xlock(&np->lock);
85 np->online = false;
87 TAILQ_FOREACH(ctrlr, &np->controllers, link) {
93 while (!TAILQ_EMPTY(&np->controllers))
94 sx_sleep(np, &np->lock, 0, "nvmfoff", 0);
95 sx_xunlock(&np->lock);
101 struct nvmft_port *np = arg;
107 if (lun_id >= le32toh(np->cdata.nn)) {
109 np->cdata.subnqn, lun_id, le32toh(np->cdata.nn));
114 sx_xlock(&np->lock);
115 new_ns = mallocarray(np->num_ns + 1, sizeof(*new_ns), M_NVMFT,
117 for (i = 0; i < np->num_ns; i++) {
118 if (np->active_ns[i] < nsid)
120 if (np->active_ns[i] == nsid) {
121 sx_xunlock(&np->lock);
124 np->cdata.subnqn, lun_id);
131 memcpy(new_ns, np->active_ns, i * sizeof(*np->active_ns));
137 memcpy(new_ns + i + 1, np->active_ns + i, (np->num_ns - i) *
138 sizeof(*np->active_ns));
140 np->num_ns++;
141 old_ns = np->active_ns;
142 np->active_ns = new_ns;
144 TAILQ_FOREACH(ctrlr, &np->controllers, link) {
148 sx_xunlock(&np->lock);
157 struct nvmft_port *np = arg;
162 if (lun_id >= le32toh(np->cdata.nn))
166 sx_xlock(&np->lock);
167 for (i = 0; i < np->num_ns; i++) {
168 if (np->active_ns[i] == nsid)
171 sx_xunlock(&np->lock);
173 np->cdata.subnqn, lun_id);
178 memmove(np->active_ns + i, np->active_ns + i + 1,
179 (np->num_ns - (i + 1)) * sizeof(*np->active_ns));
180 np->num_ns--;
184 TAILQ_FOREACH(ctrlr, &np->controllers, link) {
188 sx_xunlock(&np->lock);
194 nvmft_populate_active_nslist(struct nvmft_port *np, uint32_t nsid,
199 sx_slock(&np->lock);
201 for (i = 0; i < np->num_ns; i++) {
202 if (np->active_ns[i] <= nsid)
204 nslist->ns[count] = htole32(np->active_ns[i]);
209 sx_sunlock(&np->lock);
218 struct nvmft_port *np = ctrlr->np;
234 io = ctl_alloc_io(np->port.ctl_pool_ref);
240 io->io_hdr.nexus.targ_port = np->port.targ_port;
258 struct nvmft_port *np = ctrlr->np;
267 io = ctl_alloc_io(np->port.ctl_pool_ref);
272 io->io_hdr.nexus.targ_port = np->port.targ_port;
615 nvmft_port_free(struct nvmft_port *np)
617 KASSERT(TAILQ_EMPTY(&np->controllers),
618 ("%s(%p): active controllers", __func__, np));
620 if (np->port.targ_port != -1) {
621 if (ctl_port_deregister(&np->port) != 0)
625 free(np->active_ns, M_NVMFT);
626 clean_unrhdr(np->ids);
627 delete_unrhdr(np->ids);
628 sx_destroy(&np->lock);
629 free(np, M_NVMFT);
635 struct nvmft_port *np;
640 TAILQ_FOREACH(np, &nvmft_ports, link) {
641 if (strcmp(np->cdata.subnqn, subnqn) == 0)
644 return (np);
650 struct nvmft_port *np;
653 TAILQ_FOREACH(np, &nvmft_ports, link) {
654 if (np->port.targ_port == port_id)
657 return (np);
703 struct nvmft_port *np;
787 np = nvmft_port_find(subnqn);
788 if (np != NULL) {
796 np = malloc(sizeof(*np), M_NVMFT, M_WAITOK | M_ZERO);
797 refcount_init(&np->refs, 1);
798 np->max_io_qsize = max_io_qsize;
799 np->cap = _nvmf_controller_cap(max_io_qsize, enable_timeout / 500);
800 sx_init(&np->lock, "nvmft port");
801 np->ids = new_unrhdr(0, MIN(CTL_MAX_INIT_PER_PORT - 1,
803 TAILQ_INIT(&np->controllers);
807 osrelease, subnqn, nn, ioccsz, iorcsz, &np->cdata);
808 np->cdata.aerl = NVMFT_NUM_AER - 1;
809 np->cdata.oaes = htole32(NVME_ASYNC_EVENT_NS_ATTRIBUTE);
810 np->cdata.oncs = htole16(NVMEF(NVME_CTRLR_DATA_ONCS_VERIFY, 1) |
814 np->cdata.fuses = NVMEF(NVME_CTRLR_DATA_FUSES_CNW, 1);
816 np->fp.afi = NVMEF(NVME_FIRMWARE_PAGE_AFI_SLOT, 1);
817 memcpy(np->fp.revision[0], np->cdata.fr, sizeof(np->cdata.fr));
819 port = &np->port;
829 port->onoff_arg = np;
832 port->targ_lun_arg = np;
842 nvmft_port_rele(np);
849 TAILQ_INSERT_TAIL(&nvmft_ports, np, link);
860 struct nvmft_port *np;
896 np = nvmft_port_find(subnqn);
897 if (np == NULL) {
905 np = nvmft_port_find_by_id(port_id);
906 if (np == NULL) {
915 TAILQ_REMOVE(&nvmft_ports, np, link);
918 ctl_port_offline(&np->port);
919 nvmft_port_rele(np);
929 struct nvmft_port *np;
935 np = NULL;
986 np = nvmft_port_find(data->subnqn);
987 if (np == NULL) {
994 if (!np->online) {
999 np = NULL;
1002 nvmft_port_ref(np);
1007 error = nvmft_handoff_admin_queue(np, trtype, params, cmd,
1016 error = nvmft_handoff_io_queue(np, trtype, params, cmd, data);
1027 if (np != NULL)
1028 nvmft_port_rele(np);
1037 struct nvmft_port *np;
1054 TAILQ_FOREACH(np, &nvmft_ports, link) {
1055 sx_slock(&np->lock);
1056 TAILQ_FOREACH(ctrlr, &np->controllers, link) {
1064 np->cdata.subnqn,
1067 sx_sunlock(&np->lock);
1097 struct nvmft_port *np;
1104 TAILQ_FOREACH(np, &nvmft_ports, link) {
1105 sx_slock(&np->lock);
1106 TAILQ_FOREACH(ctrlr, &np->controllers, link) {
1123 sx_sunlock(&np->lock);