* [Qemu-devel] [PULL 1/2] aio-posix: Change CONFIG_EPOLL to CONFIG_EPOLL_CREATE1
2016-03-17 11:08 [Qemu-devel] [PULL 0/2] Block patches Stefan Hajnoczi
@ 2016-03-17 11:08 ` Stefan Hajnoczi
2016-03-17 11:08 ` [Qemu-devel] [PULL 2/2] Revert "qed: Implement .bdrv_drain" Stefan Hajnoczi
2016-03-17 12:43 ` [Qemu-devel] [PULL 0/2] Block patches Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2016-03-17 11:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Matthew Fortune, Stefan Hajnoczi
From: Matthew Fortune <Matthew.Fortune@imgtec.com>
CONFIG_EPOLL was being used to guard epoll_create1 which results
in build failures on CentOS 5.
Signed-off-by: Matthew Fortune <matthew.fortune@imgtec.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Message-id: 6D39441BF12EF246A7ABCE6654B023536BB85D08@hhmail02.hh.imgtec.org
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
aio-posix.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/aio-posix.c b/aio-posix.c
index fa7f8ab..7fd565f 100644
--- a/aio-posix.c
+++ b/aio-posix.c
@@ -18,7 +18,7 @@
#include "block/block.h"
#include "qemu/queue.h"
#include "qemu/sockets.h"
-#ifdef CONFIG_EPOLL
+#ifdef CONFIG_EPOLL_CREATE1
#include <sys/epoll.h>
#endif
@@ -33,7 +33,7 @@ struct AioHandler
QLIST_ENTRY(AioHandler) node;
};
-#ifdef CONFIG_EPOLL
+#ifdef CONFIG_EPOLL_CREATE1
/* The fd number threashold to switch to epoll */
#define EPOLL_ENABLE_THRESHOLD 64
@@ -483,7 +483,7 @@ bool aio_poll(AioContext *ctx, bool blocking)
void aio_context_setup(AioContext *ctx, Error **errp)
{
-#ifdef CONFIG_EPOLL
+#ifdef CONFIG_EPOLL_CREATE1
assert(!ctx->epollfd);
ctx->epollfd = epoll_create1(EPOLL_CLOEXEC);
if (ctx->epollfd == -1) {
--
2.5.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PULL 2/2] Revert "qed: Implement .bdrv_drain"
2016-03-17 11:08 [Qemu-devel] [PULL 0/2] Block patches Stefan Hajnoczi
2016-03-17 11:08 ` [Qemu-devel] [PULL 1/2] aio-posix: Change CONFIG_EPOLL to CONFIG_EPOLL_CREATE1 Stefan Hajnoczi
@ 2016-03-17 11:08 ` Stefan Hajnoczi
2016-03-17 12:43 ` [Qemu-devel] [PULL 0/2] Block patches Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2016-03-17 11:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi
This reverts commit df9a681dc9ad41c9cdeb9ecc5d060ba9abd27e01.
Note that commit df9a681dc9ad41c9cdeb9ecc5d060ba9abd27e01 included some
unrelated hunks, possibly due to a merge failure or an overlooked
squash. This only reverts the qed .bdrv_drain() implementation.
The qed .bdrv_drain() implementation is unsafe and can lead to a double
request completion.
Paolo Bonzini reports:
"The problem is that bdrv_qed_drain calls qed_plug_allocating_write_reqs
unconditionally, but this is not correct if an allocating write is
queued. In this case, qed_unplug_allocating_write_reqs will restart the
allocating write and possibly cause it to complete. The aiocb however
is still in use for the L2/L1 table writes, and will then be completed
again as soon as the table writes are stable."
For QEMU 2.6 we can simply revert this commit. A full solution for the
qed need check timer may be added if the bdrv_drain() implementation is
extended.
Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1457431876-8475-1-git-send-email-stefanha@redhat.com
---
block/qed.c | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/block/qed.c b/block/qed.c
index 8de7dd0..5a58856 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -377,18 +377,6 @@ static void bdrv_qed_attach_aio_context(BlockDriverState *bs,
}
}
-static void bdrv_qed_drain(BlockDriverState *bs)
-{
- BDRVQEDState *s = bs->opaque;
-
- /* Cancel timer and start doing I/O that were meant to happen as if it
- * fired, that way we get bdrv_drain() taking care of the ongoing requests
- * correctly. */
- qed_cancel_need_check_timer(s);
- qed_plug_allocating_write_reqs(s);
- bdrv_aio_flush(s->bs, qed_clear_need_check, s);
-}
-
static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags,
Error **errp)
{
@@ -1694,7 +1682,6 @@ static BlockDriver bdrv_qed = {
.bdrv_check = bdrv_qed_check,
.bdrv_detach_aio_context = bdrv_qed_detach_aio_context,
.bdrv_attach_aio_context = bdrv_qed_attach_aio_context,
- .bdrv_drain = bdrv_qed_drain,
};
static void bdrv_qed_init(void)
--
2.5.0
^ permalink raw reply related [flat|nested] 4+ messages in thread