lkml.org 
[lkml]   [2013]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 01/21] aio: fix kioctx not being freed after cancellation at exit time
    Date
    From: Benjamin LaHaise <bcrl@kvack.org>

    The recent changes overhauling fs/aio.c introduced a bug that results in the
    kioctx not being freed when outstanding kiocbs are cancelled at exit_aio()
    time. Specifically, a kiocb that is cancelled has its completion events
    discarded by batch_complete_aio(), which then fails to wake up the process
    stuck in free_ioctx(). Fix this by modifying the wait_event() condition
    in free_ioctx() appropriately.

    This patch was tested with the cancel operation in the thread based code
    posted yesterday.

    Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
    Signed-off-by: Kent Overstreet <koverstreet@google.com>
    Cc: Kent Overstreet <koverstreet@google.com>
    Cc: Josh Boyer <jwboyer@redhat.com>
    Cc: Zach Brown <zab@redhat.com>
    ---
    fs/aio.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/fs/aio.c b/fs/aio.c
    index c5b1a8c..fe794af 100644
    --- a/fs/aio.c
    +++ b/fs/aio.c
    @@ -307,7 +307,9 @@ static void free_ioctx(struct kioctx *ctx)
    kunmap_atomic(ring);

    while (atomic_read(&ctx->reqs_active) > 0) {
    - wait_event(ctx->wait, head != ctx->tail);
    + wait_event(ctx->wait,
    + (head != ctx->tail) ||
    + (atomic_read(&ctx->reqs_active) <= 0);

    avail = (head <= ctx->tail ? ctx->tail : ctx->nr_events) - head;

    --
    1.8.2.1


    \
     
     \ /
      Last update: 2013-05-14 04:01    [W:4.166 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site