libnvme(9)
β¨ libnvme β enum nvme_id_nsfeat β¨
okay so bestie, welcome to the libnvme(9) API Manual page, and today's main character is literally one tiny enum π
this is from the libnvme API manual, and we're about to make namespace features make sense, i promise π«Ά
π NAME π
enum nvme_id_nsfeat β this field defines features of the namespace β¨
like, that's the whole vibe. it's giving "here's what this namespace can do" π
πΈ SYNOPSIS πΈ
enum nvme_id_nsfeat {
NVME_NS_FEAT_THIN ,
NVME_NS_FEAT_NATOMIC ,
NVME_NS_FEAT_DULBE ,
NVME_NS_FEAT_ID_REUSE ,
NVME_NS_FEAT_IO_OPT ,
NVME_NS_FEAT_MAM ,
NVME_NS_FEAT_OPTRPERF
};
seven constants, no skips, we love a complete set π
π Constants π
β NVME_NS_FEAT_THIN
if this is set, it means the namespace supports thin provisioning. specifically, the Namespace Capacity that gets reported may be less than the Namespace Size. so like, the space you see isn't always the space you get, no cap π that's just thin provisioning being thin provisioning π
β NVME_NS_FEAT_NATOMIC
if this is set, the fields NAWUN, NAWUPF, and NACWU are defined for this namespace, and the host should use those for this namespace instead of the AWUN, AWUPF, and ACWU fields in the Identify Controller data structure. so yeah, namespace-level wins over controller-level here, iykyk π
β NVME_NS_FEAT_DULBE
if this is set, the controller supports the Deallocated or Unwritten Logical Block error for this namespace π¦ good to know, honestly
β NVME_NS_FEAT_ID_REUSE
if this is set, the value in the NGUID field for this namespace β if it's non-zero β is never reused by the controller, and the value in the EUI64 field for this namespace β if it's also non-zero β is never reused by the controller either. so once it's taken, it's taken, periodt π
tiny detail that matters: both of those say "if non-zero", so keep the zero case in mind bestie π
β NVME_NS_FEAT_IO_OPT
if this is set, the fields NPWG, NPWA, NPDG, NPDA, and NOWS are defined for this namespace, and the host should use them for I/O optimization π₯ that's five fields, count 'em, all five, i'm not skipping any π§
β NVME_NS_FEAT_MAM
if this is set, Multiple Atomicity Mode applies to write operations to this namespace. if it's cleared, Single Atomicity Mode applies to write operations to this namespace. so it's literally one bit deciding your atomicity whole situation π set = multiple, cleared = single, that's the entire tea β
β NVME_NS_FEAT_OPTRPERF
if this is set, the fields NPRG, NPRA, and NORS are defined for this namespace, and the host should use them for I/O optimization π yes it's a different set of three fields than the IO_OPT one β don't mix them up bestie, that's the trap π
π a lil sign-off π
that's the whole page, bestie β every constant, every field name, every "if set" and "if cleared", nothing dropped π this was the libnvme(9) API Manual, dated October 2026, and the page itself is enum nvme_id_nsfeat. go forth and identify those namespace features, you absolute icon πβ¨π
π¦ where this page comes from
- arch rolling: nvme-cli 3.2-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms