diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2009-01-08 12:35:11 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-08 12:58:09 -0800 |
commit | 33b04b9308959af7febc1c111c766fa3fd8b1934 (patch) | |
tree | 3438b08d90973cee03f8e37e41c93c774aad5c85 /kernel/async.c | |
parent | 85da1fb545e5fe51c35e0576f71780cc557f4277 (diff) | |
download | lwn-33b04b9308959af7febc1c111c766fa3fd8b1934.tar.gz lwn-33b04b9308959af7febc1c111c766fa3fd8b1934.zip |
async: make async_synchronize_full() more serializing
turns out that there are real problems with allowing async
tasks that are scheduled from async tasks to run after
the async_synchronize_full() returns.
This patch makes the _full more strict and a complete
synchronization. Later I might need to add back a lighter
form of synchronization for other uses.. but not right now.
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/async.c')
-rw-r--r-- | kernel/async.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/async.c b/kernel/async.c index 97373380c9e7..64cc916299a5 100644 --- a/kernel/async.c +++ b/kernel/async.c @@ -206,7 +206,9 @@ EXPORT_SYMBOL_GPL(async_schedule_special); void async_synchronize_full(void) { - async_synchronize_cookie(next_cookie); + do { + async_synchronize_cookie(next_cookie); + } while (!list_empty(&async_running) || !list_empty(&async_pending)); } EXPORT_SYMBOL_GPL(async_synchronize_full); |