DF-0823 / trigger_v2.sh
#!/bin/sh # DF-0823 trigger v2 — cleaner trigger without cleanup trap. # Explicitly unmounts everything in the correct order. # All state is left in place for post-mortem if the guest survives. set -e IMG_A=/tmp/h2a.img IMG_B=/tmp/h2b.img VN_A=vn0 VN_B=vn1 MNT_DATA_A=/mnt/h2a MNT_DATA_B=/mnt/h2b MNT_CLUSTER=/mnt/test PFS_LABEL=testpfs IMG_SIZE=256 echo "[1] Creating images and devices..." dd if=/dev/zero of=${IMG_A} bs=1m count=${IMG_SIZE} 2>&1 | tail -1 dd if=/dev/zero of=${IMG_B} bs=1m count=${IMG_SIZE} 2>&1 | tail -1 vnconfig -c ${VN_A} ${IMG_A} vnconfig -c ${VN_B} ${IMG_B} newfs_hammer2 /dev/${VN_A} 2>&1 | tail -1 newfs_hammer2 /dev/${VN_B} 2>&1 | tail -1 echo "[2] Creating MASTER PFS on device A..." mkdir -p ${MNT_DATA_A} mount_hammer2 /dev/${VN_A}@DATA ${MNT_DATA_A} hammer2 -s ${MNT_DATA_A} pfs-create ${PFS_LABEL} 2>&1 echo "[3] Mounting MASTER PFS (nchains=1)..." mkdir -p ${MNT_CLUSTER} mount_hammer2 /dev/${VN_A}@${PFS_LABEL} ${MNT_CLUSTER} echo "[4] Getting clid..." CLID=$(hammer2 -s ${MNT_CLUSTER} pfs-list 2>&1 | grep "${PFS_LABEL}" | awk '{print $2}') echo " clid=${CLID}" echo "[5] Mounting device B and creating SLAVE PFS..." mkdir -p ${MNT_DATA_B} mount_hammer2 /dev/${VN_B}@DATA ${MNT_DATA_B} hammer2 -t slave -u ${CLID} -s ${MNT_DATA_B} pfs-create ${PFS_LABEL} 2>&1 echo "[6] I/O to spin up XOP threads..." ls -la ${MNT_CLUSTER}/ 2>&1 || true echo "trigger" > ${MNT_CLUSTER}/testfile 2>&1 || true sync echo "[7] Unmounting device B @DATA (SLAVE chain stays)..." umount ${MNT_DATA_B} echo "[8] Unmounting cluster PFS (cleanup: nchains=2, pfs_nmasters=1)..." umount ${MNT_CLUSTER} echo "[9] Unmounting device A @DATA..." umount ${MNT_DATA_A} echo "[10] Waiting 20s for any delayed orphan..." sleep 20 echo "[SUCCESS] Guest survived — no panic (FIXED kernel)." exit 0 |