libnvme(9)

πŸ“¦ version 3.2, in arch rolling

πŸ’… libnvme(9) β€” the API Manual, but make it make sense

okay bestie, so this is a page straight out of the libnvme(9) API manual, and it's about one very specific little enum. yes, an enum. no, don't scroll away, it's actually kind of iconic once you get it. stay with me 🫢


✨ NAME ✨

enum nvme_lm_track_send_fields β€” the Track Send command fields, literally. that's the whole vibe. it's a pile of constants that tell the Track Send command how to behave. no cap.


🌸 SYNOPSIS 🌸

here's the whole enum laid out, exactly as it lives in the header. don't touch, don't rename, just vibe:

enum nvme_lm_track_send_fields {
    NVME_LM_TRACK_SEND_MOS_SHIFT ,
    NVME_LM_TRACK_SEND_MOS_MASK ,
    NVME_LM_TRACK_SEND_SEL_SHIFT ,
    NVME_LM_TRACK_SEND_SEL_MASK ,
    NVME_LM_SEL_LOG_USER_DATA_CHANGES ,
    NVME_LM_SEL_TRACK_MEMORY_CHANGES ,
    NVME_LM_LACT_SHIFT ,
    NVME_LM_LACT_MASK ,
    NVME_LM_LACT_STOP_LOGGING ,
    NVME_LM_LACT_START_LOGGING

};

πŸŽ€ Constants πŸŽ€

okay so here's every single constant, and what it does. i'm not skipping a single one, because we don't do that here πŸ’–

  • NVME_LM_TRACK_SEND_MOS_SHIFT β€” the shift you use to set the Management Operation Specific (MOS) field. it's giving "move things into place" energy ✨
  • NVME_LM_TRACK_SEND_MOS_MASK β€” the mask for setting the MOS field. MOS but make it masked 🌸
  • NVME_LM_TRACK_SEND_SEL_SHIFT β€” the shift for setting the Select (SEL) field. slide into position, bestie πŸ’…
  • NVME_LM_TRACK_SEND_SEL_MASK β€” the mask for setting the SEL field. iconic, protected, unmessable πŸ”₯
  • NVME_LM_SEL_LOG_USER_DATA_CHANGES β€” the select option for Log User Data Changes. yup, that's the one πŸ“
  • NVME_LM_SEL_TRACK_MEMORY_CHANGES β€” the select option for Track Memory Changes. also a select option, also valid, also slaying 🌈
  • NVME_LM_LACT_SHIFT β€” the shift for setting the Logging Action (LACT) β€” and it's relative to MOS, so remember where you started ⭐
  • NVME_LM_LACT_MASK β€” the mask for setting LACT, also relative to MOS. same deal, different bit field πŸ’œ
  • NVME_LM_LACT_STOP_LOGGING β€” and here's the actual behaviour, listen up: the controller shall stop logging user data changes to namespaces attached to the controller associated with the User Data Migration Queue specified in the CDQ ID. yeah. that's a whole sentence. but it matters 😭
  • NVME_LM_LACT_START_LOGGING β€” and the opposite one: the controller shall start logging user data changes to namespaces attached to the controller associated with the User Data Migration Queue, into that User Data Migration Queue β€” where those user data changes are caused by the controller associated with that User Data Migration Queue processing commands. it's a lot of words but every single one is doing work, i promise πŸ™ˆ
real talk: these two LACT constants are the actual actions. everything above them is just shifts and masks getting the bits lined up so these two can do their thing. main character energy, honestly πŸ‘‘

and that's the whole page, bestie πŸ’– this was the enum nvme_lm_track_send_fields page, dated October 2026, living inside the libnvme(9) API Manual. go forth and shift those bits responsibly βœ¨πŸ¦‹πŸŽ€

πŸ“¦ where this page comes from