Re: Oops at __neigh_for_each_release (2.6.9-rc3)
From: "David S. Miller" <davem@davemloft.net>
Date: 2004-10-01 21:19:28
On Fri, 1 Oct 2004 22:17:35 +0200 Duncan Sands [off-list ref] wrote:
EIP is at __neigh_for_each_release+0x32/0xb0
Give this patch a try. And please report networking bugs to netdev@oss.sgi.com in the future, thanks. ===== net/atm/clip.c 1.42 vs edited =====
--- 1.42/net/atm/clip.c 2004-09-23 18:02:32 -07:00
+++ edited/net/atm/clip.c 2004-10-01 13:35:40 -07:00@@ -984,19 +984,7 @@ static int __init atm_clip_init(void) { - /* we should use neigh_table_init() */ - clip_tbl.lock = RW_LOCK_UNLOCKED; - clip_tbl.kmem_cachep = kmem_cache_create(clip_tbl.id, - clip_tbl.entry_size, 0, SLAB_HWCACHE_ALIGN, NULL, NULL); - - if (!clip_tbl.kmem_cachep) - return -ENOMEM; - - /* so neigh_ifdown() doesn't complain */ - clip_tbl.proxy_timer.data = 0; - clip_tbl.proxy_timer.function = NULL; - init_timer(&clip_tbl.proxy_timer); - skb_queue_head_init(&clip_tbl.proxy_queue); + neigh_table_init(&clip_tbl); clip_tbl_hook = &clip_tbl; register_atm_ioctl(&clip_ioctl_ops);
@@ -1022,7 +1010,6 @@ deregister_atm_ioctl(&clip_ioctl_ops); - neigh_ifdown(&clip_tbl, NULL); dev = clip_devs; while (dev) { next = PRIV(dev)->next;
@@ -1030,9 +1017,11 @@ free_netdev(dev); dev = next; } - if (start_timer == 0) del_timer(&idle_timer); - kmem_cache_destroy(clip_tbl.kmem_cachep); + neigh_table_clear(&clip_tbl); + + if (start_timer == 0) + del_timer(&idle_timer); clip_tbl_hook = NULL; }