libnvme(9)

πŸ“¦ version 3.2, in arch rolling

✨ 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