summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_lock.c
diff options
context:
space:
mode:
authormjg <mjg@FreeBSD.org>2013-01-06 21:47:59 +0000
committermjg <mjg@FreeBSD.org>2013-01-06 21:47:59 +0000
commit10b2623aaca510896c1497a479d4a8b7e165ab41 (patch)
treeb30e2c4c05a636035c91c6d0ed20edbbbce2ffdf /sys/kern/kern_lock.c
parentdd684091d31d5eab0f9d9bc9abcba98dc7d7bdf0 (diff)
downloadFreeBSD-src-10b2623aaca510896c1497a479d4a8b7e165ab41.zip
FreeBSD-src-10b2623aaca510896c1497a479d4a8b7e165ab41.tar.gz
lockmgr: unlock interlock (if requested) when dealing with upgrade/downgrade
requests for LK_NOSHARE locks, just like for shared locks. PR: kern/174969 Reviewed by: attilio MFC after: 1 week
Diffstat (limited to 'sys/kern/kern_lock.c')
-rw-r--r--sys/kern/kern_lock.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c
index 98f0156..7962ae1 100644
--- a/sys/kern/kern_lock.c
+++ b/sys/kern/kern_lock.c
@@ -498,6 +498,8 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk,
case LK_DOWNGRADE:
_lockmgr_assert(lk, KA_XLOCKED | KA_NOTRECURSED,
file, line);
+ if (flags & LK_INTERLOCK)
+ class->lc_unlock(ilk);
return (0);
}
}
OpenPOWER on IntegriCloud