]> git.proxmox.com Git - mirror_spl.git/blobdiff - include/sys/rwlock.h
Linux 4.8 compat: Fix RW_READ_HELD
[mirror_spl.git] / 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