nvme_fc_rcv_ls_req(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… nvme_fc_rcv_ls_req(9) β€” the kernel API manual, but make it make sense πŸŽ€

okay so bestie, welcome to the Kernel API Manual page for nvme_fc_rcv_ls_req β€” yes that's the whole title, yes I'm gonna say it like five times, no I will not be normal about it. This is the transport entry point that an LLDD calls when an NVMe LS request shows up. Slay. Let's get into it πŸ’–


✨ NAME ✨

nvme_fc_rcv_ls_req β€” transport entry point called by an LLDD upon the reception of a NVME LS request.

that's it. that's the vibe. LLDD hears an NVME LS request, LLDD picks up the phone and calls this function. periodt 🫢


🌸 SYNOPSIS 🌸

int nvme_fc_rcv_ls_req (struct nvme_fc_remote_port *portptr , struct
nvmefc_ls_rsp *lsrsp , void *lsreqbuf , u32 lsreqbuf_len );

like, look at that signature. four args, one int coming back at you. very demure, very mindful 😌


πŸ¦‹ ARGUMENTS πŸ¦‹

okay the four besties you're passing in, one by one:

  • portptr β€” pointer to the (registered) remote port that the LS was received from. and here's the detail you cannot skip: the remoteport is associated with a specific localport. iykyk πŸ’«
  • lsrsp β€” pointer to a nvmefc_ls_rsp response structure, and this one gets used to reference the exchange corresponding to the LS when you issue an ls response. it's giving "receipt for the conversation" energy 🧾
  • lsreqbuf β€” pointer to the buffer containing the LS Request. literally just the request, sitting in a buffer.
  • lsreqbuf_len β€” length, in bytes, of the received LS request. yes babe, we're measuring. u32 measuring. πŸ’…

πŸ‘‘ DESCRIPTION πŸ‘‘

so here's the tea πŸ”₯: the nvme-fc layer will copy payload to an internal structure for processing. COPY. it takes its own little copy for itself, like a responsible main character.

which means β€” and this is the part I need you to internalize β€” upon completion of the routine, the LLDD may immediately free/reuse the LS request buffer passed in the call. immediately!! no waiting, no "hold on let me check", no lingering attachments. the buffer is free real estate the second this returns, bestie πŸ¦‹βœ¨

⚠️ but listen: if this routine returns error, the LLDD should abort the exchange. error means abort. no cap, no exceptions, do not pass go 😭

🌈 SEE ALSO 🌈

go read some more, it's good for you:

register, unregister, register, unregister, rescan β€” it's a whole cycle, it's giving choreography πŸ’€πŸ’–


and that's the page!! πŸŽ€ this little love letter lives over in ./drivers/nvme/host, dated October 2026, and it's filed under nvme_fc_rcv_ls_req(9) β€” mwah, go free that buffer, you icon πŸ‘‘πŸ’œ

πŸ“¦ where this page comes from