freebsd-nq/module/spl
Brian Behlendorf a6ae97caed Add rw_tryupgrade()
This implementation of rw_tryupgrade() behaves slightly differently
from its counterparts on other platforms.  It drops the RW_READER lock
and then acquires the RW_WRITER lock leaving a small window where no
lock is held.  On other platforms the lock is never released during
the upgrade process.  This is necessary under Linux because the kernel
does not provide an upgrade function.

There are currently no callers in the ZFS code where this change in
behavior is a problem.  In fact, in most cases the code is already
written such that if the upgrade fails the RW_READER lock is dropped
and the caller blocks waiting to acquire the lock as RW_WRITER.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Matthew Thode <prometheanfire@gentoo.org>
Closes zfsonlinux/zfs#4388
Closes #534
2016-03-10 13:05:25 -08:00
..
Makefile.in Support parallel build trees (VPATH builds) 2015-07-17 12:53:11 -07:00
spl-atomic.c Refresh links to web site 2013-03-04 19:09:34 -08:00
spl-condvar.c Don't hold mutex until release cv in cv_wait 2016-01-12 15:18:44 -08:00
spl-cred.c Remove credential configure checks. 2014-10-17 15:11:51 -07:00
spl-err.c Retire legacy debugging infrastructure 2014-11-19 10:35:07 -08:00
spl-generic.c random_get_pseudo_bytes() need not provide cryptographic strength entropy 2016-02-17 09:49:09 -08:00
spl-kmem-cache.c Use spl_fstrans_mark instead of memalloc_noio_save 2015-12-18 13:24:52 -08:00
spl-kmem.c Use spl_fstrans_mark instead of memalloc_noio_save 2015-12-18 13:24:52 -08:00
spl-kobj.c kobj_read_file: Return -1 on vn_rdwr() error 2016-01-23 10:10:44 -08:00
spl-kstat.c Refactor existing code 2015-01-16 13:55:08 -08:00
spl-mutex.c Remove adaptive mutex implementation 2014-10-17 15:07:28 -07:00
spl-proc.c Provide kstat for taskqs 2015-12-16 09:35:22 -08:00
spl-rwlock.c Add rw_tryupgrade() 2016-03-10 13:05:25 -08:00
spl-taskq.c Allow kicking a taskq to spawn more threads 2016-02-05 14:08:31 -08:00
spl-thread.c Retire legacy debugging infrastructure 2014-11-19 10:35:07 -08:00
spl-tsd.c Use tsd to store tq for taskq_member 2016-01-20 13:07:45 -08:00
spl-vmem.c Use spl_fstrans_mark instead of memalloc_noio_save 2015-12-18 13:24:52 -08:00
spl-vnode.c Remove RLIM64_INFINITY assert in vn_rdwr() 2016-01-23 11:16:23 -08:00
spl-xdr.c Retire legacy debugging infrastructure 2014-11-19 10:35:07 -08:00
spl-zlib.c Refactor existing code 2015-01-16 13:55:08 -08:00