使用list在内核设备中存储值

时间:2013-12-01 12:40:34

标签: c linux-kernel kernel kernel-module

我正在编写一个小型内核设备,我需要在列表中存储值。首先添加到列表工作正常,但下一个条目会触发错误。谁能说我为什么?我的代码如下;我在fedora 18中使用内核3.6.10-4.fc18.x86_64

LIST_HEAD(dns_list_lp ) ;

static void add_dns_list(__be32 v4address,struct in6_addr v6address)
{    
struct dns_nat node;
INIT_LIST_HEAD( &node.dns_list);
node.dns_v4address=v4address;
node.dns_v6address=v6address;
list_add_tail ( &node.dns_list , &dns_list_lp );
}

2 个答案:

答案 0 :(得分:2)

您尝试存储指向局部变量的指针。您必须记住,一旦函数返回变量node的生命周期结束,并且列表中的指针不再有效。

答案 1 :(得分:1)

每次调用add_dns_list时,您都会初始化列表。