diff options
author | mjg <mjg@FreeBSD.org> | 2013-01-06 21:47:59 +0000 |
---|---|---|
committer | mjg <mjg@FreeBSD.org> | 2013-01-06 21:47:59 +0000 |
commit | 10b2623aaca510896c1497a479d4a8b7e165ab41 (patch) | |
tree | b30e2c4c05a636035c91c6d0ed20edbbbce2ffdf /sys/kern/kern_lock.c | |
parent | dd684091d31d5eab0f9d9bc9abcba98dc7d7bdf0 (diff) | |
download | FreeBSD-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.c | 2 |
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); } } |