diff options
Diffstat (limited to 'sys/kern/kern_lock.c')
-rw-r--r-- | sys/kern/kern_lock.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index cc59fbacf63a..9fbee4dcdc30 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -918,6 +918,9 @@ lockmgr_lock_fast_path(struct lock *lk, u_int flags, struct lock_object *ilk, u_int op; bool locked; + if (__predict_false(panicstr != NULL)) + return (0); + op = flags & LK_TYPE_MASK; locked = false; switch (op) { @@ -1100,6 +1103,9 @@ lockmgr_unlock_fast_path(struct lock *lk, u_int flags, struct lock_object *ilk) const char *file; int line; + if (__predict_false(panicstr != NULL)) + return (0); + file = __FILE__; line = __LINE__; @@ -1146,6 +1152,9 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk, int contested = 0; #endif + if (panicstr != NULL) + return (0); + error = 0; tid = (uintptr_t)curthread; op = (flags & LK_TYPE_MASK); @@ -1172,11 +1181,6 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk, lk->lock_object.lo_name, file, line)); class = (flags & LK_INTERLOCK) ? LOCK_CLASS(ilk) : NULL; - if (panicstr != NULL) { - if (flags & LK_INTERLOCK) - class->lc_unlock(ilk); - return (0); - } if (lk->lock_object.lo_flags & LK_NOSHARE) { switch (op) { |