diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2009-01-08 15:35:11 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-08 15:58:09 -0500 |
commit | 33b04b9308959af7febc1c111c766fa3fd8b1934 (patch) | |
tree | 3438b08d90973cee03f8e37e41c93c774aad5c85 /kernel | |
parent | 85da1fb545e5fe51c35e0576f71780cc557f4277 (diff) |
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')
-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); | |||
206 | 206 | ||
207 | void async_synchronize_full(void) | 207 | void async_synchronize_full(void) |
208 | { | 208 | { |
209 | async_synchronize_cookie(next_cookie); | 209 | do { |
210 | async_synchronize_cookie(next_cookie); | ||
211 | } while (!list_empty(&async_running) || !list_empty(&async_pending)); | ||
210 | } | 212 | } |
211 | EXPORT_SYMBOL_GPL(async_synchronize_full); | 213 | EXPORT_SYMBOL_GPL(async_synchronize_full); |
212 | 214 | ||