]>
Commit | Line | Data |
---|---|---|
23c654c5 JR |
1 | >thursday. the box is still up and oops-free this morning. so, we |
2 | >definately have an smp problem here... | |
3 | ||
4 | its a start! | |
5 | ||
6 | >now, how in the world do we go about tracking something like this down? | |
7 | ||
8 | try the following patch. the neighbour code in clip seems a bit | |
9 | non-standard -- there might be other lossage | |
10 | ||
11 | Index: net/atm/clip.c | |
12 | =================================================================== | |
13 | RCS file: /afs/cmf/project/cvsroot/linux/net/atm/clip.c,v | |
14 | retrieving revision 1.8 | |
15 | diff -u -r1.8 clip.c | |
16 | --- net/atm/clip.c 7 Mar 2003 18:54:44 -0000 1.8 | |
17 | +++ net/atm/clip.c 10 Mar 2003 12:33:43 -0000 | |
18 | @@ -121,13 +121,15 @@ | |
19 | /*DPRINTK("idle_timer_check\n");*/ | |
20 | write_lock(&clip_tbl.lock); | |
21 | for (i = 0; i <= NEIGH_HASHMASK; i++) { | |
22 | - struct neighbour **np; | |
23 | + struct neighbour *n, **np; | |
24 | ||
25 | - for (np = &clip_tbl.hash_buckets[i]; *np;) { | |
26 | - struct neighbour *n = *np; | |
27 | + np = &clip_tbl.hash_buckets[i]; | |
28 | + while ((n = *np) != NULL) { | |
29 | struct atmarp_entry *entry = NEIGH2ENTRY(n); | |
30 | struct clip_vcc *clip_vcc; | |
31 | ||
32 | + write_lock(&n->lock); | |
33 | + | |
34 | for (clip_vcc = entry->vccs; clip_vcc; | |
35 | clip_vcc = clip_vcc->next) | |
36 | if (clip_vcc->idle_timeout && | |
37 | @@ -139,8 +141,10 @@ | |
38 | atm_async_release_vcc(clip_vcc->vcc, | |
39 | -ETIMEDOUT); | |
40 | } | |
41 | + | |
42 | if (entry->vccs || | |
43 | time_before(jiffies, entry->expires)) { | |
44 | + write_unlock(&n->lock); | |
45 | np = &n->next; | |
46 | continue; | |
47 | } | |
48 | @@ -152,12 +156,14 @@ | |
49 | while ((skb = skb_dequeue(&n->arp_queue)) != | |
50 | NULL) | |
51 | dev_kfree_skb(skb); | |
52 | + write_unlock(&n->lock); | |
53 | np = &n->next; | |
54 | continue; | |
55 | } | |
56 | *np = n->next; | |
57 | DPRINTK("expired neigh %p\n",n); | |
58 | n->dead = 1; | |
59 | + write_unlock(&n->lock); | |
60 | neigh_release(n); | |
61 | } | |
62 | } | |
63 | ||
64 | ||
65 | ------------------------------------------------------- | |
66 | This sf.net email is sponsored by:ThinkGeek | |
67 | Welcome to geek heaven. | |
68 | http://thinkgeek.com/sf | |
69 | _______________________________________________ | |
70 | Linux-atm-general mailing list | |
71 | Linux-atm-general@lists.sourceforge.net | |
72 | https://lists.sourceforge.net/lists/listinfo/linux-atm-general |