libnvme(9)

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

okay bestie, sit DOWN, we're doing libnvme(9) today and it's giving ✨kernel-adjacent✨ in the best way. This page is all about one lil struct, no cap.


🌸 NAME 🌸

struct nvme_zns_append_args β€” Arguments for the NVMe ZNS Append command πŸ¦‹

like literally the whole page is just this one struct's whole deal. iconic behavior.


✨ SYNOPSIS ✨

struct nvme_zns_append_args {
    __u64 zslba;
    __u64 *result;
    void *data;
    void *metadata;
    int args_size;
    int fd;
    __u32 timeout;
    __u32 nsid;
    __u32 ilbrt;
    __u32 data_len;
    __u32 metadata_len;
    __u16 nlb;
    __u16 control;
    __u16 lbat;
    __u16 lbatm;
    __u8 rsvd1[4];
    __u64 ilbrt_u64;
 };

look at her. so many fields. she's serving structure, she's serving layout, she's serving alignment. we love her πŸ’…


πŸ‘‘ Members πŸ‘‘

okay so here's the field-by-field breakdown, and yes I'm doing every single one, because every single one matters, fr fr.

  • zslba β€” the Zone start logical block address πŸŽ€ where the zone begins, bestie.
  • result β€” the command completion result from CQE dword0. that's where the answer to "how did it go" comes home to roost.
  • data β€” userspace address of the data πŸ“¦
  • metadata β€” userspace address of the metadata πŸ—‚οΈ
  • args_size β€” size of struct nvme_zns_append_args. yes she knows her own size. self-aware queen.
  • fd β€” file descriptor of nvme device πŸ”Œ the doorway to the actual hardware.
  • timeout β€” timeout in ms ⏳ measured in milliseconds, don't get it twisted.
  • nsid β€” Namespace ID. which namespace are we talking to? this one.
  • ilbrt β€” Initial logical block reference tag 🏷️
  • data_len β€” length of data πŸ“
  • metadata_len β€” length of metadata πŸ“
  • nlb β€” number of logical blocks. how many blocks we're appending, periodt.
  • control β€” (no description given in the original, so I'm not making one up, bestie 🫢 it's just control and we respect her privacy)
  • lbat β€” logical block application tag 🏷️
  • lbatm β€” logical block application tag mask 🎭 the mask, not the tag. different girls, different jobs.
  • rsvd1 β€” Reserved. it's a __u8 rsvd1[4], hands off, don't touch, it's reserved for a reason πŸ™ˆ
  • ilbrt_u64 β€” Initial logical block reference tag β€” 8 byte version required for enhanced protection info πŸ”₯ note that "8 byte version" part, it's important, it's the whole point of having this separate field from the __u32 ilbrt up top.

ok real talk for one sec: rsvd1 is Reserved. do not write into it, do not get creative with it. reserved means reserved. slay responsibly πŸ’–

and that's the whole page, bestie!! every field accounted for, nothing skipped, we ate and left no crumbs πŸ“πŸ§š

this was from the libnvme API Manual, dated August 2026, and the page you're holding is struct nvme_zns_append_args from libnvme(9) 🌈

mwah, go append some zones πŸ’œβœ¨

πŸ“¦ where this page comes from