- Add support for queueing and executing NVMe admin and NVM commands
via ctl_run and ctl_queue. This requires fixing several places to
use wrapper routines for access to shared fields between SCSI and
NVMe I/O requests. It also entailed fixing a few places that were
SCSI-specific to add NVME logic.
In places that remain SCSI-specific assertions were added (if not
already present) to catch NVMe requests.
- NVMe has much simpler command ordering requirements than SCSI. In
particular, the HBA is not required to enforce any specific ordering
for requests with overlapping LBAs. The host is required to manage
that ordering. However, fused commands (currently only COMPARE and
WRITE NVM commands can be fused) are required to be executed
atomically.
To support fused commands, make the second half of a fused command
block on the first half, and have commands submitted after a fused
command pair block on the second half.
- Add handlers and command tables for admin and NVM commands that
operate on individual namespaces and will be passed down from an
NVMe over Fabrics controller to a CTL LUN.
Sponsored by: Chelsio Communications