哈希表函数hlist_add_foret在林旭内核中的实现



哈希列表函数hlist_add_foret在linux内核中的实现如下,

struct hlist_node {
struct hlist_node *next, **pprev;
};
/*
* This function is to add n before next
*/
static inline void hlist_add_before(struct hlist_node *n, struct hlist_node *next)
{
n->pprev = next->pprev;
n->next = next;
next->pprev = &n->next;
*(n->pprev) = n;
}

我对函数中的最后一行*(n->pprev) = n感到困惑。我以为只有前三行就足够了。怎么最后一行就在那儿!!

我终于拿到了。它只是为了把最后一块拼图放在它的位置上。在这个散列列表函数中,它必须处理一个三角形关系。首先,切断原来的粘合,其次,在中间插入新的粘合。第三,建立新的与之前和之后的联系。*(n->pprev)是指向下一个节点的指针。以前,它是下一个节点,但现在是n。前两行用于节点"n"。第三行用于节点"next"。第四行是n前面的节点。有四行将整个列表连接在一起。

最新更新