The batch completion code was trying to be a bit too clever, and skip checking ctx where it couldn't be NULL - but that broke if a kiocb had been cancelled. Move the check to kioctx_ring_unlock(). Reported-by: Valdis Kletnieks <Valdis.Kletnieks@xxxxxx> Signed-off-by: Kent Overstreet <koverstreet@xxxxxxxxxx> --- fs/aio.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/aio.c b/fs/aio.c index 62573d3..0d2f39d 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -683,6 +683,9 @@ static inline void kioctx_ring_unlock(struct kioctx *ctx, unsigned tail) { struct aio_ring *ring; + if (!ctx) + return; + smp_wmb(); /* make event visible before updating tail */ @@ -760,8 +763,7 @@ void batch_complete_aio(struct batch_complete *batch) } if (unlikely(req->ki_ctx != ctx)) { - if (ctx) - kioctx_ring_unlock(ctx, tail); + kioctx_ring_unlock(ctx, tail); ctx = req->ki_ctx; tail = kioctx_ring_lock(ctx); -- 1.7.12 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html