diff --git a/fs/aio.c b/fs/aio.c index a6deaa78326d5bd05adafc5b2bee373ca0757b83..fb8e45b88cd4ecf0aa4b3c485051d7f437ba7bd8 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -496,7 +496,12 @@ static int aio_setup_ring(struct kioctx *ctx) ctx->mmap_size = nr_pages * PAGE_SIZE; pr_debug("attempting mmap of %lu bytes\n", ctx->mmap_size); - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) { + ctx->mmap_size = 0; + aio_free_ring(ctx); + return -EINTR; + } + ctx->mmap_base = do_mmap_pgoff(ctx->aio_ring_file, 0, ctx->mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, 0, &unused);