DF-3178 / run_full.sh
#!/bin/sh # DF-3178 — full instrumented run: mount census-lie image, verify wiring, # probe which syscall wedges (open/statfs/getfsstat) with procstat -kk # kernel-stack capture, then unmount + verify release. set - cd "$(dirname "$0")" CFG=../../../dfbsd-qemu/config SSH="ssh -F $CFG -o ConnectTimeout=8 -o BatchMode=yes" SCP="scp -F $CFG -o ConnectTimeout=8 -o BatchMode=yes" python3 craft_img.py df3178w.img wiring $SCP df3178w.img dfbsd:/tmp/df3178.img $SCP mount_ro.c statfs_probe.c dfbsd:/tmp/ $SSH dfbsd 'sh -c "cc -O2 -I/usr/src/sys -o /root/mount_ro /tmp/mount_ro.c && cc -O2 -o /root/statfs_probe /tmp/statfs_probe.c && echo BUILD_OK"' cat > /tmp/df3178_full.sh <<'GOEOF' #!/bin/sh echo "== pre-mount ==" vmstat -m | grep -i hpfs || echo "(no HPFS rows)" sysctl vm.stats.vm.v_free_count mkdir -p /tmp/hpfsmp vnconfig -u vn0 2>/dev/null vnconfig vn0 /tmp/df3178.img || exit 1 START=$(date +%s) /root/mount_ro /dev/vn0 /tmp/hpfsmp || { echo MOUNT_FAILED; exit 1; } END=$(date +%s) echo "MOUNT_RC=0 wall=$((END-START))s" echo "== post-mount ==" vmstat -m | grep -i hpfs sysctl vm.stats.vm.v_free_count echo "== probe (each syscall, 10s alarm) ==" ( /root/statfs_probe /tmp/hpfsmp > /tmp/probe.out 2>&1; echo PROBE_EXIT=$? >> /tmp/probe.out ) & sleep 35 cat /tmp/probe.out echo "== kernel stacks of probe (if stuck) ==" procstat -kk $(pgrep statfs_probe) 2>/dev/null || echo NO_PROBE_PROC echo "== statfs via syscall from sh (sanity) ==" echo "== unmount + release ==" umount /tmp/hpfsmp && echo UMOUNT_OK sleep 1 vmstat -m | grep -i hpfs || echo "(HPFS rows gone)" sysctl vm.stats.vm.v_free_count vnconfig -u vn0 && echo VN_RELEASED GOEOF $SCP /tmp/df3178_full.sh dfbsd:/tmp/ $SSH dfbsd "sh /tmp/df3178_full.sh" echo "FULL_EXIT=$?" |