zfs/module/splat
Clemens Fruhwirth 8e99d66b05 Add support for rw semaphore under PREEMPT_RT_FULL
The main complication from the RT patch set is that the RW semaphore
locks change such that read locks on an rwsem can be taken only by
a single thread.  All other threads are locked out. This single
thread can take a read lock multiple times though. The underlying
implementation changes to a mutex with an additional read_depth
count.

The implementation can be best understood by inspecting the RT
patch.  rwsem_rt.h and rt.c give the best insight into how RT
rwsem works. My implementation for rwsem_tryupgrade is basically
an inversion of rt_downgrade_write found in rt.c. Please see the
comments in the code.

Unfortunately, I have to drop SPLAT rwlock test4 completely as this
test tries to take multiple locks from different threads, which RT
rwsems do not support.  Otherwise SPLAT, zconfig.sh, zpios-sanity.sh
and zfs-tests.sh pass on my Debian-testing VM with the kernel
linux-image-4.8.0-1-rt-amd64.

Tested-by: kernelOfTruth <kerneloftruth@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Clemens Fruhwirth <clemens@endorphin.org>
Closes zfsonlinux/zfs#5491
Closes #589
Closes #308
2016-12-19 12:45:24 -08:00
..
Makefile.in Support parallel build trees (VPATH builds) 2015-07-17 12:53:11 -07:00
splat-atomic.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-condvar.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-cred.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-ctl.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-generic.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-internal.h Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-kmem.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-kobj.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-linux.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-list.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-mutex.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-random.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-rwlock.c Add support for rw semaphore under PREEMPT_RT_FULL 2016-12-19 12:45:24 -08:00
splat-taskq.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-thread.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-time.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-vnode.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00
splat-zlib.c Refactor some splat macro to function 2016-12-15 11:30:11 -08:00