mirror_zfs/include
Chunwei Chen f58040c0fc Implement a proper rw_tryupgrade
Current rw_tryupgrade does rw_exit and then rw_tryenter(RW_RWITER), and then
does rw_enter(RW_READER) if it fails. This violate the assumption that
rw_tryupgrade should be atomic and could cause extra contention or even lock
inversion.

This patch we implement a proper rw_tryupgrade. For rwsem-spinlock, we take
the spinlock to check rwsem->count and rwsem->wait_list. For normal rwsem, we
use cmpxchg on rwsem->count to change the value from single reader to single
writer.

Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Closes zfsonlinux/zfs#4692
Closes #554
2016-05-31 11:44:15 -07:00
..
fs Kernel header installation should respect --prefix 2014-10-28 09:31:48 -07:00
linux Implement a proper rw_tryupgrade 2016-05-31 11:44:15 -07:00
rpc Kernel header installation should respect --prefix 2014-10-28 09:31:48 -07:00
sharefs Kernel header installation should respect --prefix 2014-10-28 09:31:48 -07:00
sys Implement a proper rw_tryupgrade 2016-05-31 11:44:15 -07:00
util Support parallel build trees (VPATH builds) 2015-07-17 12:53:11 -07:00
vm Kernel header installation should respect --prefix 2014-10-28 09:31:48 -07:00
Makefile.am Retire legacy debugging infrastructure 2014-11-19 10:35:07 -08:00
spl-ctl.h Refresh links to web site 2013-03-04 19:09:34 -08:00
splat-ctl.h Update code to use misc_register()/misc_deregister() 2014-10-17 15:07:28 -07:00
strings.h Refresh links to web site 2013-03-04 19:09:34 -08:00
unistd.h Refresh links to web site 2013-03-04 19:09:34 -08:00