diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2018-06-28 16:28:22 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2018-06-28 16:28:22 +0100 |
commit | 7106a87d96c58a2ad7a4669781e58b22a3081004 (patch) | |
tree | 4c8993ddea1c98a759470b35374f18d7827fec6e /block/linux-aio.c | |
parent | 4a83bf2f339d4b63ecd5ef48b9816c3b7ee24553 (diff) | |
parent | ed6e2161715c527330f936d44af4c547f25f687e (diff) | |
download | qemu-7106a87d96c58a2ad7a4669781e58b22a3081004.zip qemu-7106a87d96c58a2ad7a4669781e58b22a3081004.tar.gz qemu-7106a87d96c58a2ad7a4669781e58b22a3081004.tar.bz2 |
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
Pull request
* Gracefully handle Linux AIO init failure
# gpg: Signature made Wed 27 Jun 2018 15:48:28 BST
# gpg: using RSA key 9CA4ABB381AB73C8
# gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>"
# gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>"
# Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8
* remotes/stefanha/tags/block-pull-request:
linux-aio: properly bubble up errors from initialization
compiler: add a sizeof_field() macro
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'block/linux-aio.c')
-rw-r--r-- | block/linux-aio.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/block/linux-aio.c b/block/linux-aio.c index 88b8d55..19eb922 100644 --- a/block/linux-aio.c +++ b/block/linux-aio.c @@ -15,6 +15,7 @@ #include "block/raw-aio.h" #include "qemu/event_notifier.h" #include "qemu/coroutine.h" +#include "qapi/error.h" #include <libaio.h> @@ -470,16 +471,21 @@ void laio_attach_aio_context(LinuxAioState *s, AioContext *new_context) qemu_laio_poll_cb); } -LinuxAioState *laio_init(void) +LinuxAioState *laio_init(Error **errp) { + int rc; LinuxAioState *s; s = g_malloc0(sizeof(*s)); - if (event_notifier_init(&s->e, false) < 0) { + rc = event_notifier_init(&s->e, false); + if (rc < 0) { + error_setg_errno(errp, -rc, "failed to to initialize event notifier"); goto out_free_state; } - if (io_setup(MAX_EVENTS, &s->ctx) != 0) { + rc = io_setup(MAX_EVENTS, &s->ctx); + if (rc < 0) { + error_setg_errno(errp, -rc, "failed to create linux AIO context"); goto out_close_efd; } |