DF-5026 / run_ab.sh
#!/bin/sh # DF-5026 — A/B: original vs fixed sink pattern on the guest. set -e rm -rf /tmp/ab6; mkdir -p /tmp/ab6/orig /tmp/ab6/fixed cp /tmp/df5026.c /tmp/ab6/orig/ cp /tmp/Makefile.df5026 /tmp/ab6/orig/Makefile cp /tmp/df5026_fixed.c /tmp/ab6/fixed/df5026.c cp /tmp/Makefile.df5026 /tmp/ab6/fixed/Makefile cp /tmp/df5026_trigger.c /tmp/ab6/ cc -O -o /tmp/ab6/df5026_trigger /tmp/ab6/df5026_trigger.c (cd /tmp/ab6/orig && make >/dev/null 2>&1) (cd /tmp/ab6/fixed && make >/dev/null 2>&1) echo "builds OK:" ls -l /tmp/ab6/orig/df5026.ko /tmp/ab6/fixed/df5026.ko echo "== ORIGINAL pattern: offline then read ==" kldload /tmp/ab6/orig/df5026.ko sleep 1 D=/dev/df50260 /tmp/ab6/df5026_trigger offline $D /tmp/ab6/df5026_trigger wedge $D > /tmp/ab6/w.out 2>&1 & WPID=$! sleep 2 echo "wedge pid: $WPID" ps -o pid,stat,wchan -p $WPID || echo "(already gone)" kill -9 $WPID 2>/dev/null || true sleep 1 if ps -o pid,stat,wchan -p $WPID 2>/dev/null; then echo "SURVIVES SIGKILL (original pattern)" fi /tmp/ab6/df5026_trigger poke $D sleep 1 ps -o pid,stat,wchan -p $WPID 2>/dev/null || echo "gone after poke (original pattern)" cat /tmp/ab6/w.out kldunload df5026 echo "== FIXED pattern: offline then read ==" kldload /tmp/ab6/fixed/df5026.ko sleep 1 /tmp/ab6/df5026_trigger offline $D /tmp/ab6/df5026_trigger wedge $D && echo "wedge returned immediately (fixed pattern)" sleep 1 if ps ax | grep "df5026_trigger wedge" | grep -v grep >/dev/null; then echo "UNEXPECTED: wedge process still present (fixed)" else echo "no wedge process remains (fixed pattern)" fi kldunload df5026 echo "== A/B complete, guest clean ==" |