# DF-4011 — mpr_user.c COMPAT_FREEBSD32 block is dead, un-compilable code; native RAID_ACTION ioctl referenced only by the dead shim

## What

`sys/dev/raid/mpr/mpr_user.c:2425-2604` (`#ifdef COMPAT_FREEBSD32`) cannot
compile and is not compiled anywhere in the tree:

1. `mpr_ioctl_devsw` (mpr_user.c:2606-2619) calls
   `mpr_ioctl32(dev, com, arg, flag, td)` — **`com` and `td` are undefined
   identifiers** in that scope (the function's parameters are
   `ap->a_cmd`/no `td` at all).
2. `mpr_ioctl32` itself calls `mpr_ioctl(dev, cmd, &arg, flag, td)` with
   **5 arguments**; `mpr_ioctl` takes 4 (mpr_user.c:2258-2259).
3. DragonFly does not define `COMPAT_FREEBSD32` in any kernel config (the
   32-bit-compat layer this shim was written for was FreeBSD's), so the
   block never builds — these are latent compile-time defects, not runtime
   bugs.

4. The shim maps `MPRIO_RAID_ACTION32` → native `MPRIO_RAID_ACTION`
   (mpr_user.c:2523-2537), but the native `mpr_ioctl()` switch
   (mpr_user.c:2272-2417) has **no `MPRIO_RAID_ACTION` case at all** — it
   would fall to `default: ENOIOCTL`. The RAID-action ioctl surface exists
   in the header (mpr_ioctl.h:101-114,362) and in the 32-bit struct copy,
   but has no implementation. (This also answers the pass-2 checklist item
   "(d) RAID action ioctls": there is no buffer-sizing bug because there is
   no handler — `struct mpr_raid_action` is dead weight.)

## Impact

Info / latent: zero runtime impact as shipped (the ifdef is never defined),
but (a) anyone re-enabling COMPAT_FREEBSD32 gets an immediate build break
rather than a silent mis-build, and (b) the missing RAID_ACTION handler
documents a feature gap that tools ported from FreeBSD may expect.

## Fix sketch

Delete the COMPAT_FREEBSD32 block (or port it properly: `com`→`cmd`,
drop `td`, fix the 5-arg call, and drop or implement the RAID_ACTION
mapping). Recorded as Info; no PoC needed.
