diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-08-30 18:05:22 +0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-01-29 01:20:09 +0400 |
commit | 4a444b1f06d259ce938a47048840260f71a91c84 (patch) | |
tree | bc8d5f2d2a3fbbbb3efc50711e3b5cfc14966a7e /include/linux | |
parent | 67de11769bd5ec339a62169f500b04f304826c00 (diff) | |
download | linux-4a444b1f06d259ce938a47048840260f71a91c84.tar.xz |
rwsem: add rwsem_is_contended
Btrfs needs a simple way to know if it needs to let go of it's read lock on a
rwsem. Introduce rwsem_is_contended to check to see if there are any waiters on
this rwsem currently. This is just a hueristic, it is meant to be light and not
100% accurate and called by somebody already holding on to the rwsem in either
read or write. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <clm@fb.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/rwsem.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index 0616ffe45702..03f3b05e8ec1 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -75,6 +75,17 @@ do { \ } while (0) /* + * This is the same regardless of which rwsem implementation that is being used. + * It is just a heuristic meant to be called by somebody alreadying holding the + * rwsem to see if somebody from an incompatible type is wanting access to the + * lock. + */ +static inline int rwsem_is_contended(struct rw_semaphore *sem) +{ + return !list_empty(&sem->wait_list); +} + +/* * lock for reading */ extern void down_read(struct rw_semaphore *sem); |