list_del() in remove_partial() sets poison values for next/prev so there should no list corruption but a failure showing the poison values. static inline void list_del(struct list_head *entry) { __list_del_entry(entry); entry->next = LIST_POISON1; entry->prev = LIST_POISON2; }