diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c index 82ab48efa82..8f97b08b88f 100644 --- a/sys/dev/nvme/nvme_ns.c +++ b/sys/dev/nvme/nvme_ns.c @@ -231,10 +231,15 @@ nvme_ns_get_data(struct nvme_namespace *ns) uint32_t nvme_ns_get_stripesize(struct nvme_namespace *ns) { + uint32_t ss; if (((ns->data.nsfeat >> NVME_NS_DATA_NSFEAT_NPVALID_SHIFT) & - NVME_NS_DATA_NSFEAT_NPVALID_MASK) != 0 && ns->data.npwg != 0) { - return ((ns->data.npwg + 1) * nvme_ns_get_sector_size(ns)); + NVME_NS_DATA_NSFEAT_NPVALID_MASK) != 0) { + ss = nvme_ns_get_sector_size(ns); + if (ns->data.npwa != 0) + return ((ns->data.npwa + 1) * ss); + else if (ns->data.npwg != 0) + return ((ns->data.npwg + 1) * ss); } return (ns->boundary); }