]> git.proxmox.com Git - mirror_qemu.git/commit
linux-aio: properly bubble up errors from initialization
authorNishanth Aravamudan <naravamudan@digitalocean.com>
Fri, 22 Jun 2018 19:37:00 +0000 (12:37 -0700)
committerStefan Hajnoczi <stefanha@redhat.com>
Wed, 27 Jun 2018 12:06:34 +0000 (13:06 +0100)
commited6e2161715c527330f936d44af4c547f25f687e
tree691d9a8ffcf3b7b6fe520ad7c2e2b65b2bb67855
parentf18793b096e69c7acfce66cded483ba9fc01762a
linux-aio: properly bubble up errors from initialization

laio_init() can fail for a couple of reasons, which will lead to a NULL
pointer dereference in laio_attach_aio_context().

To solve this, add a aio_setup_linux_aio() function which is called
early in raw_open_common. If this fails, propagate the error up. The
signature of aio_get_linux_aio() was not modified, because it seems
preferable to return the actual errno from the possible failing
initialization calls.

Additionally, when the AioContext changes, we need to associate a
LinuxAioState with the new AioContext. Use the bdrv_attach_aio_context
callback and call the new aio_setup_linux_aio(), which will allocate a
new AioContext if needed, and return errors on failures. If it fails for
any reason, fallback to threaded AIO with an error message, as the
device is already in-use by the guest.

Add an assert that aio_get_linux_aio() cannot return NULL.

Signed-off-by: Nishanth Aravamudan <naravamudan@digitalocean.com>
Message-id: 20180622193700.6523-1-naravamudan@digitalocean.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
block/file-posix.c
block/linux-aio.c
include/block/aio.h
include/block/raw-aio.h
stubs/linux-aio.c
util/async.c