* This is only for internal list manipulation where we know
  * the prev/next entries already!
  */
-#ifndef CONFIG_DEBUG_LIST
 static inline void __list_add_rcu(struct list_head *new,
                struct list_head *prev, struct list_head *next)
 {
+       if (!__list_add_valid(new, prev, next))
+               return;
+
        new->next = next;
        new->prev = prev;
        rcu_assign_pointer(list_next_rcu(prev), new);
        next->prev = new;
 }
-#else
-void __list_add_rcu(struct list_head *new,
-                   struct list_head *prev, struct list_head *next);
-#endif
 
 /**
  * list_add_rcu - add a new entry to rcu-protected list
 
        entry->prev = LIST_POISON2;
 }
 EXPORT_SYMBOL(list_del);
-
-/*
- * RCU variants.
- */
-void __list_add_rcu(struct list_head *new,
-                   struct list_head *prev, struct list_head *next)
-{
-       WARN(next->prev != prev,
-               "list_add_rcu corruption. next->prev should be prev (%p), but was %p. (next=%p).\n",
-               prev, next->prev, next);
-       WARN(prev->next != next,
-               "list_add_rcu corruption. prev->next should be next (%p), but was %p. (prev=%p).\n",
-               next, prev->next, prev);
-       new->next = next;
-       new->prev = prev;
-       rcu_assign_pointer(list_next_rcu(prev), new);
-       next->prev = new;
-}
-EXPORT_SYMBOL(__list_add_rcu);