• Gleb Natapov's avatar
    Unused iocbs in a batch should not be accounted as active. · 69e4747e
    Gleb Natapov authored
    Since commit 080d676d ("aio: allocate kiocbs in batches") iocbs are
    allocated in a batch during processing of first iocbs.  All iocbs in a
    batch are automatically added to ctx->active_reqs list and accounted in
    ctx->reqs_active.
    
    If one (not the last one) of iocbs submitted by an user fails, further
    iocbs are not processed, but they are still present in ctx->active_reqs
    and accounted in ctx->reqs_active.  This causes process to stuck in a D
    state in wait_for_all_aios() on exit since ctx->reqs_active will never
    go down to zero.  Furthermore since kiocb_batch_free() frees iocb
    without removing it from active_reqs list the list become corrupted
    which may cause oops.
    
    Fix this by removing iocb from ctx->active_reqs and updating
    ctx->reqs_active in kiocb_batch_free().
    Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
    Reviewed-by: default avatarJeff Moyer <jmoyer@redhat.com>
    Cc: stable@kernel.org   # 3.2
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    69e4747e
aio.c 47.9 KB