1*da20d885SPeter Holm#!/bin/sh 2*da20d885SPeter Holm 3*da20d885SPeter Holm# 4*da20d885SPeter Holm# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org> 5*da20d885SPeter Holm# 6*da20d885SPeter Holm# SPDX-License-Identifier: BSD-2-Clause 7*da20d885SPeter Holm# 8*da20d885SPeter Holm 9*da20d885SPeter Holm# Test scenario description by: Kyle Evans <kevans@FreeBSD.org> 10*da20d885SPeter Holm 11*da20d885SPeter Holm# "panic: mtx_lock() of destroyed mutex 0xffffffff83717540 @ /usr/src/sys/fs/fdescfs/fdesc_vnops.c:151" seen 12*da20d885SPeter Holm 13*da20d885SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 14*da20d885SPeter Holm. ../default.cfg 15*da20d885SPeter Holm 16*da20d885SPeter Holmset -u 17*da20d885SPeter Holm 18*da20d885SPeter Holmkldstat | grep -q fdescfs.ko && { kldunload fdescfs.ko && wasloaded=1; } 19*da20d885SPeter Holmwhile true; do 20*da20d885SPeter Holm mount | grep -q "on $mntpoint " || 21*da20d885SPeter Holm mount -t fdescfs dummy $mntpoint || continue 22*da20d885SPeter Holm ls $mntpoint > /dev/null 23*da20d885SPeter Holm if mount | grep -q "on $mntpoint "; then 24*da20d885SPeter Holm if ! umount $mntpoint; then 25*da20d885SPeter Holm umount -f $mntpoint || break 26*da20d885SPeter Holm fi 27*da20d885SPeter Holm fi 28*da20d885SPeter Holmdone > /dev/null 2>&1 & 29*da20d885SPeter Holm 30*da20d885SPeter Holmstart=`date +%s` 31*da20d885SPeter Holmwhile [ $((`date +%s` - start)) -lt 10 ]; do 32*da20d885SPeter Holm kldstat | grep -q fdescfs.ko && 33*da20d885SPeter Holm kldunload fdescfs.ko 2>/dev/null 34*da20d885SPeter Holm sleep .1 35*da20d885SPeter Holm kldstat | grep -q fdescfs.ko || 36*da20d885SPeter Holm kldload fdescfs.ko 37*da20d885SPeter Holmdone 38*da20d885SPeter Holmkill %1 39*da20d885SPeter Holmwait 40*da20d885SPeter Holmmount | grep -q "on $mntpoint " && umount $mntpoint 41*da20d885SPeter Holmsleep .1 42*da20d885SPeter Holmset +u 43*da20d885SPeter Holm[ $wasloaded ] || kldunload fdescfs.ko 44*da20d885SPeter Holmexit 0 45