diff options
author | Nishanth Aravamudan <naravamudan@digitalocean.com> | 2018-06-22 12:37:00 -0700 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2018-06-27 13:06:34 +0100 |
commit | ed6e2161715c527330f936d44af4c547f25f687e (patch) | |
tree | 691d9a8ffcf3b7b6fe520ad7c2e2b65b2bb67855 /stubs | |
parent | f18793b096e69c7acfce66cded483ba9fc01762a (diff) |
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>
Diffstat (limited to 'stubs')
-rw-r--r-- | stubs/linux-aio.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/stubs/linux-aio.c b/stubs/linux-aio.c index ed47bd443c..84d1f784ae 100644 --- a/stubs/linux-aio.c +++ b/stubs/linux-aio.c @@ -21,7 +21,7 @@ void laio_attach_aio_context(LinuxAioState *s, AioContext *new_context) abort(); } -LinuxAioState *laio_init(void) +LinuxAioState *laio_init(Error **errp) { abort(); } |