/* This helper moves the initial part of @head, up to and including @entry, from @head to @list. You should pass on @entry an element you know is on @head. @list should be an empty list or a list you do not care about losing its data.  */
static void list_cut_position(struct list_head *list, struct list_head *head, struct list_head *entry)
/* This helper moves the initial part of @head, up to and including @entry, from @head to @list. You should pass on @entry an element you know is on @head. @list should be an empty list or a list you do not care about losing its data.  */
static void list_cut_position(struct list_head *list, struct list_head *head, struct list_head *entry)
{
	if (list_empty(head))
		return;
	if (list_is_singular(head) && (head->next != entry && head != entry))
		return;
	if (entry == head)
		INIT_LIST_HEAD(list);
	else
		__list_cut_position(list, head, entry);
}