#!/bin/sh
# DF-2918 race driver - runs ON THE GUEST as root.
#
# MODE=control : mounters + readers only, NO kldloop (module stays loaded).
# MODE=race    : everything, kldloop churns fuse.ko.
#
# usage: MODE=race sh /root/race.sh [n_mounters] [duration_sec]
N=${1:-16}
DUR=${2:-600}
MODE=${MODE:-race}

rm -f /root/race.log /tmp/mloop.* /tmp/kld.out /tmp/sloop.*
pids=""
i=0
while [ $i -lt $N ]; do
	/root/mountloop /home/poc/mnt fuse > /tmp/mloop.$i 2>&1 &
	pids="$pids $!"
	i=$((i+1))
done
su -m poc -c /home/poc/sysctlloop > /tmp/sloop.0 2>&1 &
pids="$pids $!"
su -m poc -c /home/poc/sysctlloop > /tmp/sloop.1 2>&1 &
pids="$pids $!"
if [ "$MODE" = race ]; then
	/root/kldloop ${GAP:-10000} > /tmp/kld.out 2>&1 &
	kpid=$!
else
	kpid=0
fi
echo "mode=$MODE mounters+readers:$pids kldloop:$kpid started $(date)" > /root/race.log

sleep $DUR

kill $pids $kpid 2>/dev/null
sleep 1
echo "=== survived $DUR seconds ===" >> /root/race.log
i=0
while [ $i -lt $N ]; do
	echo "-- mloop.$i:" >> /root/race.log
	tail -1 /tmp/mloop.$i >> /root/race.log 2>/dev/null
	i=$((i+1))
done
echo "-- sloop.0:" >> /root/race.log
tail -1 /tmp/sloop.0 >> /root/race.log 2>/dev/null
if [ "$MODE" = race ]; then
	echo "-- kldloop:" >> /root/race.log
	grep -vc "Exec format" /tmp/kld.out >> /root/race.log 2>/dev/null
	tail -2 /tmp/kld.out >> /root/race.log 2>/dev/null
fi
echo done >> /root/race.log
