|
|
9ae3a8 |
From ecfbec2139f06a75a03c510e24f265a869684edb Mon Sep 17 00:00:00 2001
|
|
|
9ae3a8 |
From: Asias He <asias@redhat.com>
|
|
|
9ae3a8 |
Date: Thu, 12 Sep 2013 07:39:35 +0200
|
|
|
9ae3a8 |
Subject: [PATCH 15/29] gluster: Abort on AIO completion failure
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
RH-Author: Asias He <asias@redhat.com>
|
|
|
9ae3a8 |
Message-id: <1378971575-22416-5-git-send-email-asias@redhat.com>
|
|
|
9ae3a8 |
Patchwork-id: 54324
|
|
|
9ae3a8 |
O-Subject: [RHEL7.0 qemu-kvm PATCH 4/4] gluster: Abort on AIO completion failure
|
|
|
9ae3a8 |
Bugzilla: 1007226
|
|
|
9ae3a8 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Fam Zheng <famz@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
From: Bharata B Rao <bharata@linux.vnet.ibm.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1004733
|
|
|
9ae3a8 |
Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6275752
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Currently if gluster AIO callback thread fails to notify the QEMU thread about
|
|
|
9ae3a8 |
AIO completion, we try graceful recovery by marking the disk drive as
|
|
|
9ae3a8 |
inaccessible. This error recovery code is race-prone as found by Asias and
|
|
|
9ae3a8 |
Stefan. However as found out by Paolo, this kind of error is impossible and
|
|
|
9ae3a8 |
hence simplify the code that handles this error recovery.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
|
|
|
9ae3a8 |
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
9ae3a8 |
(cherry picked from commit 9faa574f7d07109e2256c0b4b63e8711d650f2d8)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Conflicts:
|
|
|
9ae3a8 |
block/gluster.c
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
block/gluster.c | 17 ++---------------
|
|
|
9ae3a8 |
1 file changed, 2 insertions(+), 15 deletions(-)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
block/gluster.c | 17 ++---------------
|
|
|
9ae3a8 |
1 files changed, 2 insertions(+), 15 deletions(-)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
diff --git a/block/gluster.c b/block/gluster.c
|
|
|
9ae3a8 |
index 7b10e9c..90a51ca 100644
|
|
|
9ae3a8 |
--- a/block/gluster.c
|
|
|
9ae3a8 |
+++ b/block/gluster.c
|
|
|
9ae3a8 |
@@ -436,22 +436,9 @@ static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg)
|
|
|
9ae3a8 |
/*
|
|
|
9ae3a8 |
* Gluster AIO callback thread failed to notify the waiting
|
|
|
9ae3a8 |
* QEMU thread about IO completion.
|
|
|
9ae3a8 |
- *
|
|
|
9ae3a8 |
- * Complete this IO request and make the disk inaccessible for
|
|
|
9ae3a8 |
- * subsequent reads and writes.
|
|
|
9ae3a8 |
*/
|
|
|
9ae3a8 |
- error_report("Gluster failed to notify QEMU about IO completion");
|
|
|
9ae3a8 |
-
|
|
|
9ae3a8 |
- qemu_mutex_lock_iothread(); /* We are in gluster thread context */
|
|
|
9ae3a8 |
- acb->common.cb(acb->common.opaque, -EIO);
|
|
|
9ae3a8 |
- qemu_aio_release(acb);
|
|
|
9ae3a8 |
- s->qemu_aio_count--;
|
|
|
9ae3a8 |
- close(s->fds[GLUSTER_FD_READ]);
|
|
|
9ae3a8 |
- close(s->fds[GLUSTER_FD_WRITE]);
|
|
|
9ae3a8 |
- qemu_aio_set_fd_handler(s->fds[GLUSTER_FD_READ], NULL, NULL, NULL,
|
|
|
9ae3a8 |
- NULL);
|
|
|
9ae3a8 |
- bs->drv = NULL; /* Make the disk inaccessible */
|
|
|
9ae3a8 |
- qemu_mutex_unlock_iothread();
|
|
|
9ae3a8 |
+ error_report("Gluster AIO completion failed: %s", strerror(errno));
|
|
|
9ae3a8 |
+ abort();
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
--
|
|
|
9ae3a8 |
1.7.1
|
|
|
9ae3a8 |
|