diff --git a/sys/compat/linuxkpi/common/src/linux_idr.c b/sys/compat/linuxkpi/common/src/linux_idr.c --- a/sys/compat/linuxkpi/common/src/linux_idr.c +++ b/sys/compat/linuxkpi/common/src/linux_idr.c @@ -178,6 +178,15 @@ { struct idr_layer *il, *iln; + /* + * if this idr is empty/destroyed already, then return. + * If we do not do this then the mutex will panic while + * asserting that it is valid. + */ + if(!mtx_initialized(&idr->lock)) { + return; + } + idr_remove_all(idr); mtx_lock(&idr->lock); for (il = idr->free; il != NULL; il = iln) { @@ -802,4 +811,5 @@ { idr_destroy(&ida->idr); free(ida->free_bitmap, M_IDR); + ida->free_bitmap = NULL; }