|
@@ -793,6 +793,8 @@ void exit_aio(struct mm_struct *mm)
|
|
|
|
|
|
for (i = 0; i < table->nr; ++i) {
|
|
|
struct kioctx *ctx = table->table[i];
|
|
|
+ struct completion requests_done =
|
|
|
+ COMPLETION_INITIALIZER_ONSTACK(requests_done);
|
|
|
|
|
|
if (!ctx)
|
|
|
continue;
|
|
@@ -804,7 +806,10 @@ void exit_aio(struct mm_struct *mm)
|
|
|
* that it needs to unmap the area, just set it to 0.
|
|
|
*/
|
|
|
ctx->mmap_size = 0;
|
|
|
- kill_ioctx(mm, ctx, NULL);
|
|
|
+ kill_ioctx(mm, ctx, &requests_done);
|
|
|
+
|
|
|
+ /* Wait until all IO for the context are done. */
|
|
|
+ wait_for_completion(&requests_done);
|
|
|
}
|
|
|
|
|
|
RCU_INIT_POINTER(mm->ioctx_table, NULL);
|