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 <behlendorf1@llnl.gov>
Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
Closes zfsonlinux/zfs#5233 
Closes #577
This commit is contained in:
tuxoko 2016-10-07 20:53:58 -07:00 committed by Brian Behlendorf
parent 341dfdb3fd
commit 2529b3a80e

View File

@ -114,7 +114,12 @@ spl_rw_lockdep_on_maybe(krwlock_t *rwp) \
static inline int static inline int
RW_READ_HELD(krwlock_t *rwp) 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 static inline int