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) {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to