* [6/6] 2.6.21-rc4: known regressions [not found] <Pine.LNX.4.64.0703160925270.26106@woody.linux-foundation.org> @ 2007-03-18 18:49 ` Adrian Bunk 2007-03-20 2:38 ` David Miller 2007-03-23 18:50 ` [5/5] 2.6.21-rc4: known regressions (v2) Adrian Bunk 2007-03-24 11:25 ` 2.6.21-rc4: known regressions with patches (v2) Adrian Bunk 2 siblings, 1 reply; 5+ messages in thread From: Adrian Bunk @ 2007-03-18 18:49 UTC (permalink / raw) To: Linus Torvalds, Andrew Morton Cc: Linux Kernel Mailing List, CIJOML, v4l-dvb-maintainer, Len Brown, davem, netdev, Albert Hopkins, Ayaz Abdulla, jgarzik, Michal Piotrowski, Takashi Iwai, perex, alsa-devel, Randy Cushman, Ismail Dönmez, Stefan Richter, Thomas Meyer, Greg Kroah-Hartman, bcollins, linux1394-devel, Mark Lord, Jim Radford, Oliver Neukum, linux-usb-devel, Catalin Marinas This email lists some known regressions in Linus' tree compared to 2.6.20. If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues. Due to the huge amount of recipients, please trim the Cc when answering. Subject : Oops when changing DVB-T adapter References : http://lkml.org/lkml/2007/3/9/212 Submitter : CIJOML <cijoml@volny.cz> Status : unknown Subject : ipv6 crash References : http://lkml.org/lkml/2007/3/10/2 Submitter : Len Brown <lenb@kernel.org> Status : unknown Subject : forcedeth: skb_over_panic References : http://bugzilla.kernel.org/show_bug.cgi?id=8058 Submitter : Albert Hopkins <kernel@marduk.letterboxes.org> Handled-By : Ayaz Abdulla <aabdulla@nvidia.com> Status : submitter was asked to test a patch Subject : snd_intel8x0: divide error: 0000 References : http://lkml.org/lkml/2007/3/5/252 Submitter : Michal Piotrowski <michal.k.k.piotrowski@gmail.com> Handled-By : Takashi Iwai <tiwai@suse.de> Status : problem is being debugged Subject : snd-intel8x0: no 3d surround sound References : http://lkml.org/lkml/2007/3/5/164 Submitter : Michal Piotrowski <michal.k.k.piotrowski@gmail.com> Caused-By : Randy Cushman <rcushman_linux@earthlink.net> commit 831466f4ad2b5fe23dff77edbe6a7c244435e973 Handled-By : Takashi Iwai <tiwai@suse.de> Status : patch available Subject : Oops in __nodemgr_remove_host_dev References : http://lkml.org/lkml/2007/3/14/4 http://lkml.org/lkml/2007/3/18/87 Submitter : Ismail Dönmez <ismail@pardus.org.tr> Stefan Richter <stefanr@s5r6.in-berlin.de> Thomas Meyer <thomas@m3y3r.de> Caused-By : Greg Kroah-Hartman <gregkh@suse.de> commit 43cb76d91ee85f579a69d42bc8efc08bac560278 commit 40cf67c5fcc513406558c01b91129280208e57bf Handled-By : Stefan Richter <stefanr@s5r6.in-berlin.de> Status : problem is being debugged Subject : USB: Oops when connecting USB 1.1 docks References : http://lkml.org/lkml/2007/3/4/266 Submitter : Mark Lord <lkml@rtr.ca> Caused-By : Jim Radford <radford@blackbean.org> commit d9a7ecacac5f8274d2afce09aadcf37bdb42b93a Handled-By : Oliver Neukum <oneukum@suse.de> Jim Radford <radford@blackbean.org> Patch : http://lkml.org/lkml/2007/3/13/217 Status : patch available Subject : Possible "struct pid" leak from tty_io.c References : http://lkml.org/lkml/2007/3/8/222 Submitter : Catalin Marinas <catalin.marinas@gmail.com> Caused-By : Eric W. Biederman <ebiederm@xmission.com> commit ab521dc0f8e117fd808d3e425216864d60390500 Handled-By : Eric W. Biederman <ebiederm@xmission.com> Status : problem is being debugged ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [6/6] 2.6.21-rc4: known regressions 2007-03-18 18:49 ` [6/6] 2.6.21-rc4: known regressions Adrian Bunk @ 2007-03-20 2:38 ` David Miller 2007-03-24 19:50 ` David Miller 0 siblings, 1 reply; 5+ messages in thread From: David Miller @ 2007-03-20 2:38 UTC (permalink / raw) To: bunk; +Cc: torvalds, akpm, linux-kernel, lenb, netdev From: Adrian Bunk <bunk@stusta.de> Date: Sun, 18 Mar 2007 19:49:38 +0100 > Subject : ipv6 crash > References : http://lkml.org/lkml/2007/3/10/2 > Submitter : Len Brown <lenb@kernel.org> > Status : unknown This is caused by some problem in the router round-robin code in net/ipv6/route.c:rt6_select() Somehow it NULLs out fn->leaf, and then fib6_add_1() crashes dererencing that NULL pointer as is seen in the report. Deleting the router round-robin list mangling code in rt6_select() makes the crash go away, but such a change causes regressions in the ipv6 conformance tests. Thomas Graf discovered this bug some time ago, but we still haven't come up with a fix suitable for upstream :-/ This bug has been there for a very long time and is not a regression of 2.6.21 I'll see if I can come up with something to fix this properly. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [6/6] 2.6.21-rc4: known regressions 2007-03-20 2:38 ` David Miller @ 2007-03-24 19:50 ` David Miller 0 siblings, 0 replies; 5+ messages in thread From: David Miller @ 2007-03-24 19:50 UTC (permalink / raw) To: bunk; +Cc: torvalds, akpm, linux-kernel, lenb, netdev From: David Miller <davem@davemloft.net> Date: Mon, 19 Mar 2007 19:38:29 -0700 (PDT) > From: Adrian Bunk <bunk@stusta.de> > Date: Sun, 18 Mar 2007 19:49:38 +0100 > > > Subject : ipv6 crash > > References : http://lkml.org/lkml/2007/3/10/2 > > Submitter : Len Brown <lenb@kernel.org> > > Status : unknown > > This is caused by some problem in the router round-robin code in > net/ipv6/route.c:rt6_select() ... > I'll see if I can come up with something to fix this properly. Here is the fix I came up with and just posted to netdev for a quick review, I'll push this to the appropriate places soon if nobody spots any problems in it. commit 4c68db63b8314df3cf30b7fe595a1b8935bb2cb0 Author: David S. Miller <davem@sunset.davemloft.net> Date: Sat Mar 24 12:06:32 2007 -0700 [IPV6]: Fix routing round-robin locking. As per RFC2461, section 6.3.6, item #2, when no routers on the matching list are known to be reachable or probably reachable we do round robin on those available routes so that we make sure to probe as many of them as possible to detect when one becomes reachable faster. Each routing table has a rwlock protecting the tree and the linked list of routes at each leaf. The round robin code executes during lookup and thus with the rwlock taken as a reader. A small local spinlock tries to provide protection but this does not work at all for two reasons: 1) The round-robin list manipulation, as coded, goes like this (with read lock held): walk routes finding head and tail spin_lock(); rotate list using head and tail spin_unlock(); While one thread is rotating the list, another thread can end up with stale values of head and tail and then proceed to corrupt the list when it gets the lock. This ends up causing the OOPS in fib6_add() later onthat many people have been hitting. 2) All the other code paths that run with the rwlock held as a reader do not expect the list to change on them, they expect it to remain completely fixed while they hold the lock in that way. So, simply stated, it is impossible to implement this correctly using a manipulation of the list without violating the rwlock locking semantics. Reimplement using a per-fib6_node round-robin pointer. This way we don't need to manipulate the list at all, and since the round-robin pointer can only ever point to real existing entries we don't need to perform any locking on the changing of the round-robin pointer itself. We only need to reset the round-robin pointer to NULL when the entry it is pointing to is removed. The idea is from Thomas Graf and it is very similar to how this was implemented before the advanced router selection code when in. Signed-off-by: David S. Miller <davem@davemloft.net> diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 9eda572..cf355a3 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h @@ -58,6 +58,7 @@ struct fib6_node __u16 fn_bit; /* bit key */ __u16 fn_flags; __u32 fn_sernum; + struct rt6_info *rr_ptr; }; #ifndef CONFIG_IPV6_SUBTREES diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index f4d7be7..c46f909 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -1109,6 +1109,10 @@ static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp, rt6_stats.fib_rt_entries--; rt6_stats.fib_discarded_routes++; + /* Reset round-robin state, if necessary */ + if (fn->rr_ptr == rt) + fn->rr_ptr = NULL; + /* Adjust walkers */ read_lock(&fib6_walker_lock); FOR_WALKERS(w) { diff --git a/net/ipv6/route.c b/net/ipv6/route.c index a6b3117..3931b33 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -363,55 +363,76 @@ static int rt6_score_route(struct rt6_info *rt, int oif, return m; } -static struct rt6_info *rt6_select(struct rt6_info **head, int oif, - int strict) +static struct rt6_info *find_match(struct rt6_info *rt, int oif, int strict, + int *mpri, struct rt6_info *match) { - struct rt6_info *match = NULL, *last = NULL; - struct rt6_info *rt, *rt0 = *head; - u32 metric; + int m; + + if (rt6_check_expired(rt)) + goto out; + + m = rt6_score_route(rt, oif, strict); + if (m < 0) + goto out; + + if (m > *mpri) { + if (strict & RT6_LOOKUP_F_REACHABLE) + rt6_probe(match); + *mpri = m; + match = rt; + } else if (strict & RT6_LOOKUP_F_REACHABLE) { + rt6_probe(rt); + } + +out: + return match; +} + +static struct rt6_info *find_rr_leaf(struct fib6_node *fn, + struct rt6_info *rr_head, + u32 metric, int oif, int strict) +{ + struct rt6_info *rt, *match; int mpri = -1; - RT6_TRACE("%s(head=%p(*head=%p), oif=%d)\n", - __FUNCTION__, head, head ? *head : NULL, oif); + match = NULL; + for (rt = rr_head; rt && rt->rt6i_metric == metric; + rt = rt->u.dst.rt6_next) + match = find_match(rt, oif, strict, &mpri, match); + for (rt = fn->leaf; rt && rt != rr_head && rt->rt6i_metric == metric; + rt = rt->u.dst.rt6_next) + match = find_match(rt, oif, strict, &mpri, match); - for (rt = rt0, metric = rt0->rt6i_metric; - rt && rt->rt6i_metric == metric && (!last || rt != rt0); - rt = rt->u.dst.rt6_next) { - int m; + return match; +} - if (rt6_check_expired(rt)) - continue; +static struct rt6_info *rt6_select(struct fib6_node *fn, int oif, int strict) +{ + struct rt6_info *match, *rt0; - last = rt; + RT6_TRACE("%s(fn->leaf=%p, oif=%d)\n", + __FUNCTION__, fn->leaf, oif); - m = rt6_score_route(rt, oif, strict); - if (m < 0) - continue; + rt0 = fn->rr_ptr; + if (!rt0) + fn->rr_ptr = rt0 = fn->leaf; - if (m > mpri) { - if (strict & RT6_LOOKUP_F_REACHABLE) - rt6_probe(match); - match = rt; - mpri = m; - } else if (strict & RT6_LOOKUP_F_REACHABLE) { - rt6_probe(rt); - } - } + match = find_rr_leaf(fn, rt0, rt0->rt6i_metric, oif, strict); if (!match && - (strict & RT6_LOOKUP_F_REACHABLE) && - last && last != rt0) { + (strict & RT6_LOOKUP_F_REACHABLE)) { + struct rt6_info *next = rt0->u.dst.rt6_next; + /* no entries matched; do round-robin */ - static DEFINE_SPINLOCK(lock); - spin_lock(&lock); - *head = rt0->u.dst.rt6_next; - rt0->u.dst.rt6_next = last->u.dst.rt6_next; - last->u.dst.rt6_next = rt0; - spin_unlock(&lock); + if (!next || next->rt6i_metric != rt0->rt6i_metric) + next = fn->leaf; + + if (next != rt0) + fn->rr_ptr = next; } - RT6_TRACE("%s() => %p, score=%d\n", - __FUNCTION__, match, mpri); + RT6_TRACE("%s() => %p\n", + __FUNCTION__, match); return (match ? match : &ip6_null_entry); } @@ -657,7 +678,7 @@ restart_2: fn = fib6_lookup(&table->tb6_root, &fl->fl6_dst, &fl->fl6_src); restart: - rt = rt6_select(&fn->leaf, fl->iif, strict | reachable); + rt = rt6_select(fn, fl->iif, strict | reachable); BACKTRACK(&fl->fl6_src); if (rt == &ip6_null_entry || rt->rt6i_flags & RTF_CACHE) @@ -752,7 +773,7 @@ restart_2: fn = fib6_lookup(&table->tb6_root, &fl->fl6_dst, &fl->fl6_src); restart: - rt = rt6_select(&fn->leaf, fl->oif, strict | reachable); + rt = rt6_select(fn, fl->oif, strict | reachable); BACKTRACK(&fl->fl6_src); if (rt == &ip6_null_entry || rt->rt6i_flags & RTF_CACHE) ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [5/5] 2.6.21-rc4: known regressions (v2) [not found] <Pine.LNX.4.64.0703160925270.26106@woody.linux-foundation.org> 2007-03-18 18:49 ` [6/6] 2.6.21-rc4: known regressions Adrian Bunk @ 2007-03-23 18:50 ` Adrian Bunk 2007-03-24 11:25 ` 2.6.21-rc4: known regressions with patches (v2) Adrian Bunk 2 siblings, 0 replies; 5+ messages in thread From: Adrian Bunk @ 2007-03-23 18:50 UTC (permalink / raw) To: Linus Torvalds, Andrew Morton Cc: Linux Kernel Mailing List, CIJOML, v4l-dvb-maintainer, Tino Keitel, Oliver Neukum, greg, linux-usb-devel, Michal Piotrowski, Takashi Iwai, perex, alsa-devel, Albert Hopkins, Ayaz Abdulla, jgarzik, netdev This email lists some known regressions in Linus' tree compared to 2.6.20. If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues. Due to the huge amount of recipients, please trim the Cc when answering. Subject : Oops when changing DVB-T adapter References : http://lkml.org/lkml/2007/3/9/212 Submitter : CIJOML <cijoml@volny.cz> Status : unknown Subject : USB: iPod doesn't work References : http://lkml.org/lkml/2007/3/21/320 Submitter : Tino Keitel <tino.keitel@gmx.de> Handled-By : Oliver Neukum <oneukum@suse.de> Status : problem is being debuggged Subject : snd_intel8x0: divide error: 0000 References : http://lkml.org/lkml/2007/3/5/252 Submitter : Michal Piotrowski <michal.k.k.piotrowski@gmail.com> Handled-By : Takashi Iwai <tiwai@suse.de> Status : problem is being debugged Subject : forcedeth: skb_over_panic References : http://bugzilla.kernel.org/show_bug.cgi?id=8058 Submitter : Albert Hopkins <kernel@marduk.letterboxes.org> Handled-By : Ayaz Abdulla <aabdulla@nvidia.com> Patch : http://bugzilla.kernel.org/show_bug.cgi?id=8058 Status : patch available ^ permalink raw reply [flat|nested] 5+ messages in thread
* 2.6.21-rc4: known regressions with patches (v2) [not found] <Pine.LNX.4.64.0703160925270.26106@woody.linux-foundation.org> 2007-03-18 18:49 ` [6/6] 2.6.21-rc4: known regressions Adrian Bunk 2007-03-23 18:50 ` [5/5] 2.6.21-rc4: known regressions (v2) Adrian Bunk @ 2007-03-24 11:25 ` Adrian Bunk 2 siblings, 0 replies; 5+ messages in thread From: Adrian Bunk @ 2007-03-24 11:25 UTC (permalink / raw) To: Linus Torvalds, Andrew Morton Cc: Linux Kernel Mailing List, Maxim Levitsky, Rafael J. Wysocki, tigran, David L, Thomas Gleixner, Bob Tracy, John Stultz, bzolnier, linux-ide, Albert Hopkins, Ayaz Abdulla, jgarzik, netdev This email lists some known regressions in Linus' tree compared to 2.6.20 with patches available. If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues. Due to the huge amount of recipients, please trim the Cc when answering. Subject : suspend to disk hangs (microcode driver) References : http://lkml.org/lkml/2007/3/16/126 Submitter : Maxim Levitsky <maximlevitsky@gmail.com> Caused-By : Rafael J. Wysocki <rjw@sisk.pl> commit e3c7db621bed4afb8e231cb005057f2feb5db557 commit ed746e3b18f4df18afa3763155972c5835f284c5 commit 259130526c267550bc365d3015917d90667732f1 Handled-By : Rafael J. Wysocki <rjw@sisk.pl> Patch : http://lkml.org/lkml/2007/3/23/179 Status : patch available Subject : gettimeofday increments too slowly References : http://bugzilla.kernel.org/show_bug.cgi?id=8027 http://lkml.org/lkml/2007/3/23/329 Submitter : David L <idht4n@hotmail.com> Caused-By : Thomas Gleixner <tglx@linutronix.de> commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2 Handled-By : Thomas Gleixner <tglx@linutronix.de> Patch : http://lkml.org/lkml/2007/3/23/329 Status : patch available Subject : boot hangs during IDE detection (clocksource) References : http://lkml.org/lkml/2007/3/19/465 Submitter : Bob Tracy <rct@gherkin.frus.com> Caused-By : John Stultz <johnstul@us.ibm.com> commit 6bb74df481223731af6c7e0ff3adb31f6442cfcd Handled-By : John Stultz <johnstul@us.ibm.com> Patch : http://lkml.org/lkml/2007/3/22/287 Status : workaround-patch available Subject : forcedeth: skb_over_panic References : http://bugzilla.kernel.org/show_bug.cgi?id=8058 Submitter : Albert Hopkins <kernel@marduk.letterboxes.org> Handled-By : Ayaz Abdulla <aabdulla@nvidia.com> Patch : http://bugzilla.kernel.org/show_bug.cgi?id=8058 Status : patch available ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-03-24 19:50 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <Pine.LNX.4.64.0703160925270.26106@woody.linux-foundation.org>
2007-03-18 18:49 ` [6/6] 2.6.21-rc4: known regressions Adrian Bunk
2007-03-20 2:38 ` David Miller
2007-03-24 19:50 ` David Miller
2007-03-23 18:50 ` [5/5] 2.6.21-rc4: known regressions (v2) Adrian Bunk
2007-03-24 11:25 ` 2.6.21-rc4: known regressions with patches (v2) Adrian Bunk
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).