libnvme(9)

πŸ“¦ version 3.2, in arch rolling

πŸ’… libnvme(9) β€” API Manual πŸ’…

okay bestie, buckle up, because today we're looking at one specific little struct from the libnvme API Manual and honestly? she's giving "spreadsheet but make it NVMe" πŸ“‹βœ¨


🌸 NAME 🌸

struct nvme_id_ns_granularity_list β€” Namespace Granularity List

like, literally the struct that holds the list. that's her. that's the whole vibe. πŸŽ€


✨ SYNOPSIS ✨

struct nvme_id_ns_granularity_list {
    __le32 attributes;
    __u8 num_descriptors;
    __u8 rsvd5[27];
    struct nvme_id_ns_granularity_desc entry[NVME_ID_ND_DESCRIPTOR_MAX];
    __u8 rsvd1056[3040];
 };

no cap, that's the entire shape of her. look at those reserved arrays just... reserving. iconic behavior honestly 🫢


πŸ’– Members πŸ’–

  • attributes β€” Namespace Granularity Attributes. the attributes field, out here holding the granularity attributes for the namespace. main character energy ⭐
  • num_descriptors β€” Number of Descriptors. literally tells you how many descriptors there are. she said "count them" and then gave you the count πŸ”’πŸ’…
  • rsvd5 β€” reserved. not for you, bestie. hands off πŸ™ˆ
  • entry β€” Namespace Granularity Descriptor. this is an array of struct nvme_id_ns_granularity_desc, sized NVME_ID_ND_DESCRIPTOR_MAX β€” that's where the actual descriptor entries live πŸ‘‘
  • rsvd1056 β€” reserved. again. reserved. leave her alone 😭
quick vibe check: attributes is __le32 (little-endian, iykyk), num_descriptors is a single __u8, rsvd5 is __u8 rsvd5[27], and rsvd1056 is a big ol' __u8 rsvd1056[3040]. fr fr, those numbers are exact β€” don't go editing them πŸ’€

and that's the whole page, bestie 🌈 nothing skipped, nothing invented, every field accounted for like a responsible queen πŸ‘‘

kisses, this was the libnvme(9) page from the API Manual, dated October 2026 β€” struct nvme_id_ns_granularity_list and friends, signing off πŸ’œπŸ¦‹

πŸ“¦ where this page comes from