diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-08-30 10:05:22 -0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-01-28 16:20:09 -0500 |
commit | 4a444b1f06d259ce938a47048840260f71a91c84 (patch) | |
tree | bc8d5f2d2a3fbbbb3efc50711e3b5cfc14966a7e | |
parent | 67de11769bd5ec339a62169f500b04f304826c00 (diff) |
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>
-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 { \ | |||
75 | } while (0) | 75 | } while (0) |
76 | 76 | ||
77 | /* | 77 | /* |
78 | * This is the same regardless of which rwsem implementation that is being used. | ||
79 | * It is just a heuristic meant to be called by somebody alreadying holding the | ||
80 | * rwsem to see if somebody from an incompatible type is wanting access to the | ||
81 | * lock. | ||
82 | */ | ||
83 | static inline int rwsem_is_contended(struct rw_semaphore *sem) | ||
84 | { | ||
85 | return !list_empty(&sem->wait_list); | ||
86 | } | ||
87 | |||
88 | /* | ||
78 | * lock for reading | 89 | * lock for reading |
79 | */ | 90 | */ |
80 | extern void down_read(struct rw_semaphore *sem); | 91 | extern void down_read(struct rw_semaphore *sem); |