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