Double-linked lists
include/linux/list.h
There used to be three sets of linked-list routines in the kernel
headers, but this one is the winner. If you don't have some
particular pressing need for a single list, it's a good choice.
In particular, list_for_each_entry
is useful.