#!/bin/sh
# DF-0145 run: mount tmpfs w/ quota, populate RB-trees, measure, unmount (leak), measure.
# Must run as root (mount/unmount); the RB-tree population is via unprivileged-
# callable vquotactl "set limit uid". vfs.quota_enabled=1 must be set.
set -u
MNT=/mnt/df0145
N=${1:-200}

echo "=== DF-0145 unmount leak test (vfs.quota_enabled=$(sysctl -n vfs.quota_enabled)) ==="
mkdir -p "$MNT"

echo "--- BEFORE mount: M_MOUNT ---"
vmstat -m | awk '/mount|Mount/ || /^Type/'

mount_tmpfs tmpfs "$MNT" 2>/dev/null || { echo "mount_tmpfs failed: $?" ; exit 1; }
echo "mounted tmpfs on $MNT (vq_init ran -> RB trees ready, vfs_account enabled)"

echo "--- populating $N uid chunks via vquotactl set-limit-uid ---"
HERE=$(dirname "$0")
if [ -x "$HERE/df0145_pop" ]; then
	"$HERE/df0145_pop" "$MNT" "$N"
else
	echo "df0145_pop not built; skipping population"
fi

echo "--- AFTER populate / BEFORE unmount: M_MOUNT ---"
vmstat -m | awk '/mount|Mount/ || /^Type/'

echo "--- unmounting (VFS_ACDONE -> vq_done stub -> should leak) ---"
umount "$MNT"

echo "--- AFTER unmount: M_MOUNT (leaked if count did NOT drop back to ~baseline) ---"
vmstat -m | awk '/mount|Mount/ || /^Type/'
echo "=== done ==="
