svn commit: r332957 - head/sys/kern
Conrad Meyer
cem at FreeBSD.org
Tue Apr 24 18:41:15 UTC 2018
Author: cem
Date: Tue Apr 24 18:41:14 2018
New Revision: 332957
URL: https://svnweb.freebsd.org/changeset/base/332957
Log:
lockmgr: Add missed neutering during panic
r313683 introduced new lockmgr APIs that missed the panic-time neutering
present in the rest of our locks. Correct that by adding the usual check.
Additionally, move the __lockmgr_args neutering above the assertions at the
top of the function. Drop the interlock unlock because we shouldn't have
an unneutered interlock either. No point trying to unlock it.
PR: 227749
Reported by: jtl
Sponsored by: Dell EMC Isilon
Modified:
head/sys/kern/kern_lock.c
Modified: head/sys/kern/kern_lock.c
==============================================================================
--- head/sys/kern/kern_lock.c Tue Apr 24 18:19:30 2018 (r332956)
+++ head/sys/kern/kern_lock.c Tue Apr 24 18:41:14 2018 (r332957)
@@ -918,6 +918,9 @@ lockmgr_lock_fast_path(struct lock *lk, u_int flags, s
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,
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 lo
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 lo
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) {
More information about the svn-src-head
mailing list