Messages in this thread Patch in this message | | | Date | Tue, 13 Jan 2009 18:46:43 +0100 | From | Cornelia Huck <> | Subject | Re: [PATCH 1/2] async: Handle kthread_run() return codes. |
| |
On Tue, 13 Jan 2009 16:51:15 +0000, Ben Dooks <ben-linux@fluff.org> wrote:
> > @@ -315,11 +315,14 @@ static int async_manager_thread(void *un > > ec = atomic_read(&entry_count); > > > > while (tc < ec && tc < MAX_THREADS) { > > why not add the following to stop the wrapping of kthread_run: > > + struct task_struct *kt; > kt = kthread_run(async_thread, NULL, "async/%i", tc);
Hm, I don't think avoiding wrapping is worth adding another variable.
> if (IS_ERR(kt)) > goto schedule; > > also, I belive the goto isn't necessary, just break out of the while > > if (IS_ERR(kt)) > break;
OK, that's a bit nicer. Updated patch follows.
If we fail to create the manager thread, fall back to non-fastboot. If we fail to create an async thread, try again when the manager thread runs again.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
--- kernel/async.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
--- linux-2.6.orig/kernel/async.c +++ linux-2.6/kernel/async.c @@ -315,7 +315,10 @@ static int async_manager_thread(void *un ec = atomic_read(&entry_count); while (tc < ec && tc < MAX_THREADS) { - kthread_run(async_thread, NULL, "async/%i", tc); + if (IS_ERR(kthread_run(async_thread, NULL, "async/%i", + tc))) + /* Try again later. */ + break; atomic_inc(&thread_count); tc++; } @@ -330,7 +333,9 @@ static int async_manager_thread(void *un static int __init async_init(void) { if (async_enabled) - kthread_run(async_manager_thread, NULL, "async/mgr"); + if (IS_ERR(kthread_run(async_manager_thread, NULL, + "async/mgr"))) + async_enabled = 0; return 0; }
| |