async: make async_synchronize_full() more serializing
authorArjan van de Ven <arjan@linux.intel.com>
Thu, 8 Jan 2009 20:35:11 +0000 (12:35 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 8 Jan 2009 20:58:09 +0000 (12:58 -0800)
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>
kernel/async.c

index 97373380c9e7be42ad7126c6a5d436f7954cc0aa..64cc916299a5bb0f6558cc56c243f7d2b50bf9aa 100644 (file)
@@ -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);