rwsem: add rwsem_is_contended
authorJosef Bacik <jbacik@fusionio.com>
Fri, 30 Aug 2013 14:05:22 +0000 (10:05 -0400)
committerChris Mason <clm@fb.com>
Tue, 28 Jan 2014 21:20:09 +0000 (13:20 -0800)
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>
include/linux/rwsem.h

index 0616ffe..03f3b05 100644 (file)
@@ -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);