Index: sys/kern/kern_rwlock.c =================================================================== --- sys/kern/kern_rwlock.c (revision 255760) +++ sys/kern/kern_rwlock.c (working copy) @@ -147,9 +147,9 @@ rw = (struct rwlock *)lock; if (how) + rw_rlock(rw); + else rw_wlock(rw); - else - rw_rlock(rw); } uintptr_t @@ -161,10 +161,10 @@ rw_assert(rw, RA_LOCKED | LA_NOTRECURSED); if (rw->rw_lock & RW_LOCK_READ) { rw_runlock(rw); - return (0); + return (1); } else { rw_wunlock(rw); - return (1); + return (0); } } Index: sys/kern/kern_sx.c =================================================================== --- sys/kern/kern_sx.c (revision 255760) +++ sys/kern/kern_sx.c (working copy) @@ -162,9 +162,9 @@ sx = (struct sx *)lock; if (how) + sx_slock(sx); + else sx_xlock(sx); - else - sx_slock(sx); } uintptr_t @@ -176,10 +176,10 @@ sx_assert(sx, SA_LOCKED | SA_NOTRECURSED); if (sx_xlocked(sx)) { sx_xunlock(sx); - return (1); + return (0); } else { sx_sunlock(sx); - return (0); + return (1); } }