aboutsummaryrefslogtreecommitdiff
path: root/block/linux-aio.c
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2018-06-28 16:28:22 +0100
committerPeter Maydell <peter.maydell@linaro.org>2018-06-28 16:28:22 +0100
commit7106a87d96c58a2ad7a4669781e58b22a3081004 (patch)
tree4c8993ddea1c98a759470b35374f18d7827fec6e /block/linux-aio.c
parent4a83bf2f339d4b63ecd5ef48b9816c3b7ee24553 (diff)
parented6e2161715c527330f936d44af4c547f25f687e (diff)
downloadqemu-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.c12
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;
}