lkml.org 
[lkml]   [2016]   [Feb]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/18] aio: make aio_setup_ring killable
    Date
    From: Michal Hocko <mhocko@suse.com>

    aio_setup_ring waits for mmap_sem in writable mode. If the waiting
    task gets killed by the oom killer it would block oom_reaper from
    asynchronous address space reclaim and reduce the chances of timely
    OOM resolving. Wait for the lock in the killable mode and return with
    EINTR if the task got killed while waiting. This will also expedite
    the return to the userspace and do_exit.

    Cc: Benjamin LaHaise <bcrl@kvack.org>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Michal Hocko <mhocko@suse.com>
    ---
    fs/aio.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/fs/aio.c b/fs/aio.c
    index 56bcdf4105f4..1c2e7e2c1b2b 100644
    --- a/fs/aio.c
    +++ b/fs/aio.c
    @@ -520,7 +520,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);
    --
    2.7.0
    \
     
     \ /
      Last update: 2016-02-29 15:21    [W:4.114 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site