using struct list_head instead of sys/queue.h