Skip to content

OpenFlash v0.4.0 - Linux Data Path and Recovery

Latest

Choose a tag to compare

@manishklach manishklach released this 12 Jul 12:33

OpenFlash v0.4.0 - Linux Data Path and Recovery

OpenFlash v0.4.0 turns the controller lab's negotiated I/O queue into a usable experimental
Linux block path. This is a systems milestone, not a production storage release: it provides
an end-to-end host/controller transport for controlled QEMU experiments, with explicit
failure behavior and reproducible validation.

Highlights

  • Exposes an experimental /dev/openflash0 disk through Linux blk-mq.
  • Negotiates queue 1 through the admin queue and assigns its own MSI-X vector.
  • Maps reads, writes, flushes, and discards to phase-tagged DMA queue commands.
  • Advances the shared host/controller ABI to v0.2 with 16-entry scatter-gather lists.
  • Maps and unmaps every SGL entry safely during completion and teardown.
  • Detects timed-out I/O, freezes new submissions, fails ambiguous requests, resets the
    controller, rebuilds the queue transport, and resumes only after recovery succeeds.
  • Adds a QEMU two-segment SGL read/write round-trip test.

Compatibility

  • Linux driver ABI: OpenFlash v0.2 (0x00000002).
  • QEMU integration target: official QEMU 11.0.2 source, checksum-verified in CI.
  • Linux validation: module build and checkpatch against the configured WSL kernel tree.
  • Python validation: 22 tests plus Ruff linting.

Important limits

  • The QEMU media remains RAM-backed and is not persistent.
  • FUA and durable flush guarantees are not implemented in the Linux driver.
  • There is no command-abort opcode yet; recovery intentionally fails timed-out commands
    rather than replaying work whose media execution is unknown.
  • This release must not be used for valuable data or unverified hardware.

Verification

GitHub Actions builds the pinned QEMU integration and runs its controller QTests, in addition
to the Python test suite. The final validated workflow for this release lineage is
29192430598.

Upgrade notes

The ABI minor version changes from v0.1 to v0.2. Hosts must validate the ABI register and use
the SGL flag only when both driver and controller support v0.2. Direct single-buffer commands
remain valid under v0.2.