#!/bin/sh
# DF-2632 fix validation on the patched kernel (X86_64_GENERIC + fix.diff):
# 1) dense same-CRC32C window fill to 32768+ entries (4x the stock panic
#    threshold) -- must complete WITHOUT panic; files present afterwards
#    (some may be deferred by the fix, that is acceptable);
# 2) natural-name directory (20k sequential names) -- unaffected;
# 3) stock image roundtrip (write/sync/umount/remount/md5) -- unaffected.
set -e
cd /root/df2632
cc -O2 -o gen_names gen_names.c
cc -O2 -o fill2632 fill2632.c
cc -O2 -o naturalprobe naturalprobe.c

echo "=== [1] dense window fill (40000 same-CRC32C names, batch=256) ==="
truncate -s 512M /tmp/h2632.img
vnconfig -c vn1 /tmp/h2632.img
newfs_hammer2 -L DATA /dev/vn1 >/dev/null
mkdir -p /mnt/h2632
mount_hammer2 /dev/vn1@DATA /mnt/h2632
./gen_names deadbeef 40000 /tmp/names.txt >/dev/null 2>&1
wc -l < /tmp/names.txt
mkdir -p /mnt/h2632/dense
./fill2632 /mnt/h2632/dense /tmp/names.txt 256
echo "fill rc=$? (no panic)"
echo "dense files present: $(ls /mnt/h2632/dense | wc -l)"
sync
echo "after sync: $(ls /mnt/h2632/dense | wc -l)"
df /mnt/h2632
umount /mnt/h2632 && echo DENSE_UMOUNT_OK
vnconfig -u vn1

echo "=== [2] natural names (20000 sequential + 2000 random) ==="
truncate -s 256M /tmp/h2632n.img
vnconfig -c vn1 /tmp/h2632n.img
newfs_hammer2 -L DATA /dev/vn1 >/dev/null
mount_hammer2 /dev/vn1@DATA /mnt/h2632
mkdir -p /mnt/h2632/natural
./naturalprobe /mnt/h2632/natural 20000 2000 1000 || true
echo "natural files present: $(ls /mnt/h2632/natural | wc -l)"
umount /mnt/h2632 && echo NATURAL_UMOUNT_OK
vnconfig -u vn1

echo "=== [3] stock-image roundtrip ==="
truncate -s 64M /tmp/h2632r.img
vnconfig -c vn1 /tmp/h2632r.img
newfs_hammer2 -L DATA /dev/vn1 >/dev/null
mount_hammer2 /dev/vn1@DATA /mnt/h2632
dd if=/dev/urandom of=/mnt/h2632/rt.bin bs=1m count=8 2>/dev/null
sync
A=$(md5 -q /mnt/h2632/rt.bin)
umount /mnt/h2632
mount_hammer2 /dev/vn1@DATA /mnt/h2632
B=$(md5 -q /mnt/h2632/rt.bin)
echo "md5_live=$A md5_remount=$B"
[ "$A" = "$B" ] && echo ROUNDTRIP_MATCH || echo ROUNDTRIP_MISMATCH
umount /mnt/h2632 && echo RT_UMOUNT_OK
vnconfig -u vn1
echo "VALIDATION2632_COMPLETE"
