Lines Matching defs:ns

36 static inline struct nvme_ns_data *nvme_ns_get_data(struct nvme_ns *ns)
38 return &ns->ctrlr->nsdata[ns->id - 1];
41 static int nvme_ns_identify_update(struct nvme_ns *ns)
43 struct nvme_ctrlr *ctrlr = ns->ctrlr;
44 struct nvme_ns_data *nsdata = nvme_ns_get_data(ns);
48 ret = nvme_admin_identify_ns(ctrlr, ns->id, nsdata);
56 ns->sector_size = sector_size;
57 ns->sectors_per_max_io = ctrlr->max_xfer_size / sector_size;
58 ns->sectors_per_stripe = ns->stripe_size / sector_size;
60 ns->flags = 0x0000;
63 ns->flags |= NVME_NS_DEALLOCATE_SUPPORTED;
66 ns->flags |= NVME_NS_FLUSH_SUPPORTED;
69 ns->flags |= NVME_NS_WRITE_ZEROES_SUPPORTED;
72 ns->flags |= NVME_NS_RESERVATION_SUPPORTED;
74 ns->md_size = nsdata->lbaf[nsdata->flbas.format].ms;
75 ns->pi_type = NVME_FMT_NVM_PROTECTION_DISABLE;
78 ns->flags |= NVME_NS_DPS_PI_SUPPORTED;
79 ns->pi_type = nsdata->dps.pit;
81 ns->flags |= NVME_NS_EXTENDED_LBA_SUPPORTED;
90 int nvme_ns_construct(struct nvme_ctrlr *ctrlr, struct nvme_ns *ns,
95 ns->ctrlr = ctrlr;
96 ns->id = id;
97 ns->stripe_size = 0;
101 ns->stripe_size = (1 << ctrlr->cdata.vs[3])
104 return nvme_ns_identify_update(ns);
112 struct nvme_ns *ns = NULL;
117 ns = &ctrlr->ns[ns_id - 1];
118 ns->open_count++;
123 return ns;
128 * making sure in the process that the ns handle is valid.
130 static struct nvme_ctrlr *nvme_ns_ctrlr_lock(struct nvme_ns *ns)
134 if (!ns)
137 ctrlr = ns->ctrlr;
138 if (ns->id < 1 ||
139 ns->id > ctrlr->nr_ns ||
140 ns != &ctrlr->ns[ns->id - 1])
146 * Between the check and lock, the ns may have gone away.
149 if (ns->id > ctrlr->nr_ns ||
150 ns != &ctrlr->ns[ns->id - 1] ||
151 ns->open_count == 0) {
162 int nvme_ns_close(struct nvme_ns *ns)
166 ctrlr = nvme_ns_ctrlr_lock(ns);
172 ns->open_count--;
182 int nvme_ns_stat(struct nvme_ns *ns, struct nvme_ns_stat *ns_stat)
186 ctrlr = nvme_ns_ctrlr_lock(ns);
192 ns_stat->id = ns->id;
193 ns_stat->sector_size = ns->sector_size;
194 ns_stat->sectors = nvme_ns_get_data(ns)->nsze;
195 ns_stat->flags = ns->flags;
196 ns_stat->pi_type = ns->pi_type;
197 ns_stat->md_size = ns->md_size;
207 int nvme_ns_data(struct nvme_ns *ns, struct nvme_ns_data *nsdata)
211 ctrlr = nvme_ns_ctrlr_lock(ns);
217 memcpy(nsdata, nvme_ns_get_data(ns), sizeof(struct nvme_ns_data));
224 static struct nvme_request *_nvme_ns_rw(struct nvme_ns *ns,
232 _nvme_ns_split_request(struct nvme_ns *ns,
245 uint32_t sector_size = ns->sector_size;
246 uint32_t md_size = ns->md_size;
252 if (ns->flags & NVME_NS_DPS_PI_SUPPORTED) {
254 if ((ns->flags & NVME_NS_EXTENDED_LBA_SUPPORTED)
256 sector_size += ns->md_size;
264 child = _nvme_ns_rw(ns, qpair, payload, lba, lba_count, cb_fn,
296 static struct nvme_request *_nvme_ns_rw(struct nvme_ns *ns,
317 sector_size = ns->sector_size;
318 sectors_per_max_io = ns->sectors_per_max_io;
319 sectors_per_stripe = ns->sectors_per_stripe;
321 if (ns->flags & NVME_NS_DPS_PI_SUPPORTED)
323 if ((ns->flags & NVME_NS_EXTENDED_LBA_SUPPORTED) &&
325 sector_size += ns->md_size;
340 return _nvme_ns_split_request(ns, qpair, payload, lba,
347 return _nvme_ns_split_request(ns, qpair, payload, lba,
354 cmd->nsid = ns->id;
359 if (ns->flags & NVME_NS_DPS_PI_SUPPORTED) {
360 switch (ns->pi_type) {
377 int nvme_ns_read(struct nvme_ns *ns, struct nvme_qpair *qpair,
390 req = _nvme_ns_rw(ns, qpair, &payload, lba, lba_count, cb_fn, cb_arg,
398 int nvme_ns_read_with_md(struct nvme_ns *ns, struct nvme_qpair *qpair,
412 req = _nvme_ns_rw(ns, qpair, &payload, lba, lba_count, cb_fn, cb_arg,
420 int nvme_ns_readv(struct nvme_ns *ns, struct nvme_qpair *qpair,
439 req = _nvme_ns_rw(ns, qpair, &payload, lba, lba_count, cb_fn, cb_arg,
447 int nvme_ns_write(struct nvme_ns *ns, struct nvme_qpair *qpair,
460 req = _nvme_ns_rw(ns, qpair, &payload, lba, lba_count, cb_fn, cb_arg,
468 int nvme_ns_write_with_md(struct nvme_ns *ns, struct nvme_qpair *qpair,
482 req = _nvme_ns_rw(ns, qpair, &payload, lba, lba_count, cb_fn, cb_arg,
490 int nvme_ns_writev(struct nvme_ns *ns, struct nvme_qpair *qpair,
509 req = _nvme_ns_rw(ns, qpair, &payload, lba, lba_count, cb_fn, cb_arg,
517 int nvme_ns_write_zeroes(struct nvme_ns *ns, struct nvme_qpair *qpair,
535 cmd->nsid = ns->id;
545 int nvme_ns_deallocate(struct nvme_ns *ns, struct nvme_qpair *qpair,
563 cmd->nsid = ns->id;
572 int nvme_ns_flush(struct nvme_ns *ns, struct nvme_qpair *qpair,
584 cmd->nsid = ns->id;
589 int nvme_ns_reservation_register(struct nvme_ns *ns, struct nvme_qpair *qpair,
607 cmd->nsid = ns->id;
619 int nvme_ns_reservation_release(struct nvme_ns *ns, struct nvme_qpair *qpair,
637 cmd->nsid = ns->id;
649 int nvme_ns_reservation_acquire(struct nvme_ns *ns, struct nvme_qpair *qpair,
667 cmd->nsid = ns->id;
679 int nvme_ns_reservation_report(struct nvme_ns *ns, struct nvme_qpair *qpair,
697 cmd->nsid = ns->id;