On Wed, Jul 13, 2016 at 03:03:24PM +0200, Roman Pen wrote: > Invoking io_setup(MAX_EVENTS) we ask kernel to create ring buffer for us > with specified number of events. But kernel ring buffer allocation logic > is a bit tricky (ring buffer is page size aligned + some percpu allocation > are required) so eventually more than requested events number is allocated. > > From a userspace side we have to follow the convention and should not try > to io_submit() more or logic, which consumes completed events, should be > changed accordingly. The pitfall is in the following sequence: > > MAX_EVENTS = 128 > io_setup(MAX_EVENTS) > > io_submit(MAX_EVENTS) > io_submit(MAX_EVENTS) > > /* now 256 events are in-flight */ > > io_getevents(MAX_EVENTS) = 128 > > /* we can handle only 128 events at once, to be sure > * that nothing is pended the io_getevents(MAX_EVENTS) > * call must be invoked once more or hang will happen. */ > > To prevent the hang or reiteration of io_getevents() call this patch > restricts the number of in-flights, which is now limited to MAX_EVENTS. > > Signed-off-by: Roman Pen <roman.peny...@profitbricks.com> > Reviewed-by: Fam Zheng <f...@redhat.com> > Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> > Cc: Stefan Hajnoczi <stefa...@redhat.com> > Cc: qemu-devel@nongnu.org > --- > v3: > o comment tweaks. > > v2: > o comment tweaks. > o fix QEMU coding style. > > block/linux-aio.c | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-)
Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com>
signature.asc
Description: PGP signature