# DF-5058 — bios submitted to a never-completing mlx controller park on
mlx_bioq forever: unkillable D-state issuers + unbounded bioq growth

**file:** `sys/dev/raid/mlx/mlx_disk.c` (submit path; parking logic in
`sys/dev/raid/mlx/mlx.c`)
**bucket:** base:dev (DF-5026 / DF-5048 family — the mlx instance, the last
LD sibling)
**severity:** Low (trigger = controller hardware fault: accepts commands
then stops completing, or wedges with slots held)

## Reproduce

Not runnable on this guest: no Mylex PCI hardware (env.txt), driver never
attaches. Family twin DF-5048 (ida) was accepted with the same
hardware-gated pack.

## Expected behavior on real hardware

1. Saturate `/dev/mlxd0` with asynchronous I/O (e.g. several parallel
   `dd`/`vinum` readers).
2. Cause the controller to stop delivering completions after accepting
   commands (firmware hang / surprise fault while BUSY).
3. After the 256 slots fill, every further bio parks on `sc->mlx_bioq`
   (mlx.c:1739-1742). No timeout exists anywhere (`mc_timeout` is set at
   mlx.c:2086 and explicitly "not currently used"); `mlx_periodic` only
   polls `mlx_done` every second (mlx.c:1040) and never fails a stale
   command.
4. Every issuer sleeps in `biowait` — unkillable D-state processes; the
   bioq grows without bound (kernel memory exhaustion).

## Fix

`fix.diff`: stall watchdog inside the existing 1 Hz `mlx_periodic` callout —
if parked bufs exist and `mlx_done` completed nothing for 60 consecutive
seconds, fail every queued bio with ETIMEDOUT and fail new arrivals until
completions resume.
