[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 11/16] sheepdog: disable dataplane
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v2 11/16] sheepdog: disable dataplane |
Date: |
Wed, 16 Mar 2016 15:16:52 +0100 |
sheepdog has some calls to aio_poll that are hard to eliminate, for
example in sd_sheepdog_goto's call to do_req. Since I don't have
means to test sheepdog well, disable dataplane altogether for this
driver.
Reviewed-by: Fam Zheng <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
block/sheepdog.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/block/sheepdog.c b/block/sheepdog.c
index a6e98a5..8ced3e5 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -364,6 +364,7 @@ struct SheepdogAIOCB {
typedef struct BDRVSheepdogState {
BlockDriverState *bs;
AioContext *aio_context;
+ Error *blocker;
SheepdogInode inode;
@@ -1422,6 +1423,21 @@ static int sd_open(BlockDriverState *bs, QDict *options,
int flags,
Error *local_err = NULL;
const char *filename;
+ /* sd_snapshot_goto does blocking operations that call aio_poll
+ * (through do_req). This can cause races with iothread:
+ *
+ * main thread I/O thread
+ * ----------------- ------------------
+ * while(srco.finished == false)
+ * aio_poll(..., true)
+ * srco.finished = true
+ * aio_poll(..., true)
+ *
+ * Now aio_poll potentially blocks forever.
+ */
+ error_setg(&s->blocker, "sheepdog does not support iothreads");
+ bdrv_op_block(bs, BLOCK_OP_TYPE_DATAPLANE, s->blocker);
+
s->bs = bs;
s->aio_context = bdrv_get_aio_context(bs);
@@ -1962,6 +1978,9 @@ static void sd_close(BlockDriverState *bs)
false, NULL, NULL, NULL);
closesocket(s->fd);
g_free(s->host_spec);
+
+ bdrv_op_unblock(bs, BLOCK_OP_TYPE_DATAPLANE, s->blocker);
+ error_free(s->blocker);
}
static int64_t sd_getlength(BlockDriverState *bs)
--
1.8.3.1
- [Qemu-devel] [PATCH v2 04/16] block: plug whole tree at once, introduce bdrv_io_unplugged_begin/end, (continued)
- [Qemu-devel] [PATCH v2 04/16] block: plug whole tree at once, introduce bdrv_io_unplugged_begin/end, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 06/16] block: add BDS field to count in-flight requests, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 05/16] mirror: use bottom half to re-enter coroutine, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 07/16] block: change drain to look only at one child at a time, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 09/16] block: wait for all pending I/O when doing synchronous requests, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 12/16] aio: introduce aio_context_in_iothread, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 11/16] sheepdog: disable dataplane,
Paolo Bonzini <=
- [Qemu-devel] [PATCH v2 08/16] blockjob: introduce .drain callback for jobs, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 10/16] nfs: replace aio_poll with bdrv_drain, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 13/16] block: only call aio_poll from iothread, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 16/16] aio: convert from RFifoLock to QemuRecMutex, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 14/16] iothread: release AioContext around aio_poll, Paolo Bonzini, 2016/03/16
- [Qemu-devel] [PATCH v2 15/16] qemu-thread: introduce QemuRecMutex, Paolo Bonzini, 2016/03/16
- Re: [Qemu-devel] [PATCH v2 00/16] AioContext fine-grained locking, part 1 of 3, including bdrv_drain rewrite, Stefan Hajnoczi, 2016/03/18