diff options
Diffstat (limited to 'fs/aio.c')
-rw-r--r-- | fs/aio.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -346,10 +346,9 @@ void fastcall exit_aio(struct mm_struct *mm) | |||
346 | 346 | ||
347 | wait_for_all_aios(ctx); | 347 | wait_for_all_aios(ctx); |
348 | /* | 348 | /* |
349 | * this is an overkill, but ensures we don't leave | 349 | * Ensure we don't leave the ctx on the aio_wq |
350 | * the ctx on the aio_wq | ||
351 | */ | 350 | */ |
352 | flush_workqueue(aio_wq); | 351 | flush_work(aio_wq, &ctx->wq.work); |
353 | 352 | ||
354 | if (1 != atomic_read(&ctx->users)) | 353 | if (1 != atomic_read(&ctx->users)) |
355 | printk(KERN_DEBUG | 354 | printk(KERN_DEBUG |
@@ -372,7 +371,7 @@ void fastcall __put_ioctx(struct kioctx *ctx) | |||
372 | BUG_ON(ctx->reqs_active); | 371 | BUG_ON(ctx->reqs_active); |
373 | 372 | ||
374 | cancel_delayed_work(&ctx->wq); | 373 | cancel_delayed_work(&ctx->wq); |
375 | flush_workqueue(aio_wq); | 374 | flush_work(aio_wq, &ctx->wq.work); |
376 | aio_free_ring(ctx); | 375 | aio_free_ring(ctx); |
377 | mmdrop(ctx->mm); | 376 | mmdrop(ctx->mm); |
378 | ctx->mm = NULL; | 377 | ctx->mm = NULL; |