--- b/sys/kern/subr_witness.c +++ b/sys/kern/subr_witness.c @@ -1228,7 +1228,8 @@ witness_checkorder(struct lock_object *lock, int flags, const char *file, */ if (w1 == w) { i = w->w_index; - if (!(lock->lo_flags & LO_DUPOK) && !(flags & LOP_DUPOK) && + if (!(w->w_class->lc_flags & LC_RECURSABLE) && + !(lock->lo_flags & LO_DUPOK) && !(flags & LOP_DUPOK) && !(w_rmatrix[i][i] & WITNESS_REVERSAL)) { w_rmatrix[i][i] |= WITNESS_REVERSAL; w->w_reversed = 1;