From 2529b3a80e1bf1713c0ecbedb246654a0968b4d2 Mon Sep 17 00:00:00 2001 From: tuxoko Date: Fri, 7 Oct 2016 20:53:58 -0700 Subject: [PATCH] Linux 4.8 compat: Fix RW_READ_HELD 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 Signed-off-by: Chunwei Chen Closes zfsonlinux/zfs#5233 Closes #577 --- include/sys/rwlock.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/sys/rwlock.h b/include/sys/rwlock.h index facebe3ba..4197785db 100644 --- a/include/sys/rwlock.h +++ b/include/sys/rwlock.h @@ -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