DragonFlyBSD Kernel Audit
DF-2832 / race_oneshot.sh
← back to finding ↓ download raw
#!/bin/sh
# DF2832 decisive single-shot race (root, guest).
# Storm first, then ONE umount -f with parks hot; nohup so ssh death is fine.
B=/usr/local/df2832
MNT=/mnt/t

# clean slate
killall -u nobody churn_open dirty_writer >/dev/null 2>&1
sleep 1
umount -f $MNT >/dev/null 2>&1
sleep 1
vnconfig -u vn0 >/dev/null 2>&1
sleep 1

dd if=/dev/zero of=/root/h2img bs=1m count=0 seek=512 >/dev/null 2>&1
vnconfig -c -S 512m vn0 /root/h2img
newfs_hammer2 /dev/vn0 >/dev/null 2>&1
mount_hammer2 /dev/vn0 $MNT
chmod 777 $MNT
sysctl vfs.hammer2.limit_dirty_chains=16 >/dev/null
sysctl vfs.hammer2.limit_dirty_inodes=4 >/dev/null

echo "=== storm starting (churners only, fd-less) ==="
i=0
while [ $i -lt 12 ]; do
	su -m nobody -c "$B/churn_open /mnt/t 900 >&/dev/null &"
	i=$(( i + 1 ))
done
sleep 4
echo "starts before umount: $(sysctl -n debug.df2832_starts)"

echo "=== umount -f NOW ==="
date
umount -f $MNT 2>&1 | head -2
echo "umount rc=$? $(date)"

killall -u nobody churn_open >/dev/null 2>&1
echo "=== result ==="
sysctl debug.df2832_starts debug.df2832_hits
dmesg | grep "DF2832: HIT" | tail -20
dmesg | grep "thr_stop FREE" | tail -2
vnconfig -u vn0 >/dev/null 2>&1
echo "ONESHOT-DONE"