hlist_add_after broken?

From: Pedro Emanuel M. D. Pinto
Date: Sat Apr 17 2004 - 17:31:48 EST


There is an inline function (hlist_add_after) in include/linux/list.h which I
believe is broken. The algorithm used doesn't make sence to me so if it
actually ok I would appreciate if someone could explain it to me. Below is a
patch I made against version 2.6.1 of what I believe is a working function.

regards,

Pedro Pinto


--- include/linux/list.h.orig 2004-04-17 23:13:42.901457376 +0100
+++ include/linux/list.h 2004-04-17 23:17:28.943093824 +0100
@@ -525,9 +525,12 @@
static __inline__ void hlist_add_after(struct hlist_node *n,
struct hlist_node *next)
{
- next->next = n->next;
- *(next->pprev) = n;
- n->next = next;
+ next->next = n->next;
+ n->next = next;
+ next->pprev = &n->next;
+
+ if(next->next)
+ next->next->pprev = &next->next;
}

#define hlist_entry(ptr, type, member) container_of(ptr,type,member)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/