summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorBenjamin LaHaise <bcrl@kvack.org>2014-08-24 19:14:05 +0200
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-25 00:47:27 +0200
commitd856f32a86b2b015ab180ab7a55e455ed8d3ccc5 (patch)
tree885097a564287bad1cc32039d89501e5a2e8b867 /include
parentMerge tag 'pwm/for-3.17-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git... (diff)
downloadlinux-d856f32a86b2b015ab180ab7a55e455ed8d3ccc5.tar.xz
linux-d856f32a86b2b015ab180ab7a55e455ed8d3ccc5.zip
aio: fix reqs_available handling
As reported by Dan Aloni, commit f8567a3845ac ("aio: fix aio request leak when events are reaped by userspace") introduces a regression when user code attempts to perform io_submit() with more events than are available in the ring buffer. Reverting that commit would reintroduce a regression when user space event reaping is used. Fixing this bug is a bit more involved than the previous attempts to fix this regression. Since we do not have a single point at which we can count events as being reaped by user space and io_getevents(), we have to track event completion by looking at the number of events left in the event ring. So long as there are as many events in the ring buffer as there have been completion events generate, we cannot call put_reqs_available(). The code to check for this is now placed in refill_reqs_available(). A test program from Dan and modified by me for verifying this bug is available at http://www.kvack.org/~bcrl/20140824-aio_bug.c . Reported-by: Dan Aloni <dan@kernelim.com> Signed-off-by: Benjamin LaHaise <bcrl@kvack.org> Acked-by: Dan Aloni <dan@kernelim.com> Cc: Kent Overstreet <kmo@daterainc.com> Cc: Mateusz Guzik <mguzik@redhat.com> Cc: Petr Matousek <pmatouse@redhat.com> Cc: stable@vger.kernel.org # v3.16 and anything that f8567a3845ac was backported to Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions