ccan/list: Add list_empty_nocheck
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Sat, 23 Jul 2016 10:46:58 +0000 (20:46 +1000)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 27 Sep 2016 04:12:21 +0000 (13:42 +0930)
This is the same as list_empty but without the debug checks. This is
useful when wanting to check for an empty list without locks held,
potentially racing with addition/removal, which can be a valid thing
to do under some circumstances.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ccan/list/list.h

index 0800a0fa144f20f1ab0985b5b3dd369fe9f39eef..a4c21f189739a2b498b7487c70e454e4024c131e 100644 (file)
@@ -291,6 +291,21 @@ static inline bool list_empty_nodebug(const struct list_head *h)
 }
 #endif
 
+/**
+ * list_empty_nocheck - is a list empty?
+ * @h: the list_head
+ *
+ * If the list is empty, returns true. This doesn't perform any
+ * debug check for list consistency, so it can be called without
+ * locks, racing with the list being modified. This is ok for
+ * checks where an incorrect result is not an issue (optimized
+ * bail out path for example).
+ */
+static inline bool list_empty_nocheck(const struct list_head *h)
+{
+       return h->n.next == &h->n;
+}
+
 /**
  * list_del - delete an entry from an (unknown) linked list.
  * @n: the list_node to delete from the list.