The nfs_rwlock_t implementation uses @cv_broadcast(9f)@ to wake up the waiters. This is clearly visible in nfs_rw_exit(). In a case there is several WRITERs waiting all of them will wake up, then one thread will grab the lock, but all others will just go back and wait again in cv_wait()/cv_wait_sig() - see nfs_rw_enter_sig(). This might cause significant performance degradation in some scenarios. To fix this the nfs_rwlock_t implementation should be changed be changed to utilize @cv_signal(9f)@ instead of @cv_broadcast(9f)@.