From 82cdf817001422b742abbefa30fd540bb2a49ec4 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Sat, 23 Jul 2016 20:46:58 +1000 Subject: [PATCH] ccan/list: Add list_empty_nocheck 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 Signed-off-by: Rusty Russell --- ccan/list/list.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ccan/list/list.h b/ccan/list/list.h index 0800a0fa..a4c21f18 100644 --- a/ccan/list/list.h +++ b/ccan/list/list.h @@ -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. -- 2.39.2