Messages in this thread Patch in this message | | | Date | Mon, 8 Jun 2009 10:42:14 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: 2.6.30-rc8 Oops whilst booting |
| |
On Mon, 8 Jun 2009, James Bottomley wrote: > > I think it's a bug in the async code. It's providing cookies too high > because it doesn't stop after it finds a running entry. > > Can we try this as the fix?
Ok, this looks likely.
That said, why doesn't that function look like this?
Linus --- kernel/async.c | 15 +++++---------- 1 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/kernel/async.c b/kernel/async.c index 5054030..27235f5 100644 --- a/kernel/async.c +++ b/kernel/async.c @@ -92,23 +92,18 @@ extern int initcall_debug; static async_cookie_t __lowest_in_progress(struct list_head *running) { struct async_entry *entry; - async_cookie_t ret = next_cookie; /* begin with "infinity" value */ if (!list_empty(running)) { entry = list_first_entry(running, struct async_entry, list); - ret = entry->cookie; + return entry->cookie; } - if (!list_empty(&async_pending)) { - list_for_each_entry(entry, &async_pending, list) - if (entry->running == running) { - ret = entry->cookie; - break; - } - } + list_for_each_entry(entry, &async_pending, list) + if (entry->running == running) + return entry->cookie; - return ret; + return next_cookie; /* "infinity" value */ } static async_cookie_t lowest_in_progress(struct list_head *running)
| |