]> granicus.if.org Git - zfs/commitdiff
Linux 4.8 compat: Fix RW_READ_HELD
authortuxoko <tuxoko@gmail.com>
Sat, 8 Oct 2016 03:53:58 +0000 (20:53 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 8 Oct 2016 03:53:58 +0000 (20:53 -0700)
Linux 4.8, starting from torvalds/linux@19c5d690e, will set owner to 1 when
read held instead of leave it NULL. So we change the condition to
`rw_owner(rwp) <= 1` in RW_READ_HELD.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
Closes zfsonlinux/zfs#5233
Closes #577

include/sys/rwlock.h

index facebe3ba7fd6cc5a1c000eb14eadbada7488f9e..4197785db126fb4f1d019ac4e5566370ef2bfe60 100644 (file)
@@ -114,7 +114,12 @@ spl_rw_lockdep_on_maybe(krwlock_t *rwp)                    \
 static inline int
 RW_READ_HELD(krwlock_t *rwp)
 {
-       return (spl_rwsem_is_locked(SEM(rwp)) && rw_owner(rwp) == NULL);
+       /*
+        * Linux 4.8 will set owner to 1 when read held instead of leave it
+        * NULL. So we check whether owner <= 1.
+        */
+       return (spl_rwsem_is_locked(SEM(rwp)) &&
+           (unsigned long)rw_owner(rwp) <= 1);
 }
 
 static inline int