FreeBSD#

FreeBSD expose NVMe devices via the following device-files:

  • /dev/nvme{ctrlr_id}, NVMe Controller device node

  • /dev/nvme{ctrlr_id}ns{ns_id}, NVMe Namespace as device node

  • /dev/nda{num}, NVMe Namespace as storage device node

  • /dev/nvd{num}, NVMe Namespace as disk drive

For details see the following man-pages:

nvme, nda, nvd, pci, disk, and nvmecontrol

The FreeBSD backend uses synchronous ioctl calls to have the kernel perform NVMe commands.

NVMe Driver IOCTL#

The FreeBSD NVMe Driver IOCTL provides a rich interface for submitting commands similar to that of the Linux NVMe Driver IOCTL. However, for completion-errors, the FreeBSD NVMe Driver IOCTL provides the entire NVMe Completion result, where the Linux IOCTL maps the completion-result to an errno value and returns that instead.

In this case, the backend will transform such errors into the NVMe equivalent. See the documentation on xnvme_cmd_ctx.