항목을 삭제할때 얻는 item(객체) 은
list_for_each_entry 가 아닌 list_for_each_entry_safe 로 얻은 item 이어야 한다.
*자세한 설명은 kernel document 참고
ex)
#include <linux/list.h>
struct packet {
u8 data_1;
u8 data_2;
struct list_head p_packet_list;
};
LIST_HEAD(g_packet_list);
void func()
{
struct packet* p_pkt, *scratch;
...
list_for_each_entry_safe(p_pkt, scratch, &g_packet_list, p_packet_list) {
list_del(&p_pkt->p_packet_list);
kfree(p_pkt);
}
}
list 의 사용법에 대해서는 아래 사이트에 좋은 예제가 있다.
http://blog.naver.com/kkn2988?Redirect=Log&logNo=143977338
'Programming > Linux_Kernel' 카테고리의 다른 글
kernel 에서 call stack(call tree) 출력하기. (1) | 2013.01.24 |
---|---|
kconfig 에서 default 옵션에 대한 오류 (0) | 2012.08.27 |
work queue 함수들의 특성 정리 (0) | 2012.01.03 |
gpio 와 sysfs node 의 정보가 일치하지 않는 문제 (0) | 2011.12.29 |
I2C check 함수 (0) | 2011.10.14 |