The patch titled Subject: aio: correct calculation of available events has been removed from the -mm tree. Its filename was aio-correct-calculation-of-available-events.patch This patch was dropped because an updated version will be merged ------------------------------------------------------ From: Benjamin LaHaise <bcrl@xxxxxxxxx> Subject: aio: correct calculation of available events When the number of available events in the ring buffer is calculated, the avail calculation is incorrect when head == tail. This is harmless in aio_read_events_ring(), but in free_ioctx() leads to the subsequent WARN_ON(atomic_read(&ctx->reqs_available) > ctx->nr). Correct this. Signed-off-by: Benjamin LaHaise <bcrl@xxxxxxxxx> Reviewed-by: Kent Overstreet <koverstreet@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/aio.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff -puN fs/aio.c~aio-correct-calculation-of-available-events fs/aio.c --- a/fs/aio.c~aio-correct-calculation-of-available-events +++ a/fs/aio.c @@ -337,7 +337,8 @@ static void free_ioctx(struct kioctx *ct while (atomic_read(&ctx->reqs_available) < ctx->nr) { wait_event(ctx->wait, head != ctx->shadow_tail); - avail = (head < ctx->shadow_tail ? ctx->shadow_tail : ctx->nr) - head; + avail = (head <= ctx->shadow_tail ? + ctx->shadow_tail : ctx->nr) - head; atomic_add(avail, &ctx->reqs_available); head += avail; @@ -885,7 +886,7 @@ static long aio_read_events_ring(struct goto out; while (ret < nr) { - long avail = (head < ctx->shadow_tail + long avail = (head <= ctx->shadow_tail ? ctx->shadow_tail : ctx->nr) - head; struct io_event *ev; struct page *page; _ Patches currently in -mm which might be from bcrl@xxxxxxxxx are aio-v2-fix-kioctx-not-being-freed-after-cancellation-at-exit-time.patch aio-fix-ringbuffer-calculation-so-we-dont-wrap.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html