#!/bin/sh
# DF-4895 deterministic trigger (guest, root, after setup_vinum.sh):
#   1. proper force-stop of drive d2 -> set_drive_state(down, force)
#      -> daemon vn_close(drive->vp); drive->vp = NULL
#   2. state pokes restore drive/sd/plex/vol "up" (vp stays NULL)
#   3. single 32KB RAID-5 group write:
#      first phase reads go via the (still valid) cdev,
#      complete_raid5_write() second phase hits vn_strategy(NULL)
#      -> Fatal trap 12 (vn_strategy+0x38, fault address 0x5c)
[ -f /tmp/cc ] || { dd if=/dev/zero bs=512 count=64 2>/dev/null | tr "\0" "\314" > /tmp/cc; }
echo "[1] vinum stop -f d2 (daemon closes vp)"
vinum stop -f d2; sleep 3
echo "[2] poke states back up (vp stays NULL)"
vinum setstate -f up d2
for o in rv.p0.s0 rv.p0.s1 rv.p0.s2 rv.p0 rv; do
  vinum setstate -f up $o >/dev/null 2>&1
done
sleep 1
echo "[3] the write:"
dd of=/dev/vinum/vol/rv bs=32768 seek=5 count=1 if=/tmp/cc conv=notrunc
echo "SURVIVED (no panic)"
