#!/bin/sh
# DF-2997 run_stocknod.sh - STOCK-kernel proof that the "unmount: dangling
# vnode" panic PRE-EXISTS the DF-2997 fix: drive the STOCK kernel's own
# already-correct vput() error path in nfs_mknodrpc (truncated MKNOD reply
# -> VNON 0-ref cached vnode), then force-unmount. No DF-2997 leak sites
# involved at all.
D=/root/df2997
cd $D
echo "=== DF-2997 stock mknod-umount panic proof $(date) ==="
uname -v
pkill fakesrv 2>/dev/null || true
sleep 1
(VERBOSE=1 ./fakesrv > $D/fakesrv3.log 2>&1 &)
sleep 1
mkdir -p /mnt3
chmod 0777 /mnt3
mkdir -p /tmp/df2997 && cp probe /tmp/df2997/
mount_nfs -o port=2049,udp 127.0.0.1:/nd /mnt3 && echo MOUNT_ND_OK
echo "NVN before: $(sysctl -n debug.numvnodes)"
su -m maxx -c "/tmp/df2997/probe n /mnt3/n0" || true
echo "NVN after:  $(sysctl -n debug.numvnodes)"
ps -ax -o pid,stat,wchan,comm | grep -E '[p]robe' || echo "no wedged probe (expected: no lock bug on this path)"
sync
echo "=== now the forced unmount (expected: panic unmount: dangling vnode) ==="
umount -f /mnt3
echo "UMOUNT_SURVIVED (unexpected)"
