[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 12/13] block: Block "device IO" during bdrv_d
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH v6 12/13] block: Block "device IO" during bdrv_drain and bdrv_drain_all |
Date: |
Mon, 25 May 2015 10:48:31 +0800 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Sat, 05/23 19:11, Max Reitz wrote:
> On 21.05.2015 08:43, Fam Zheng wrote:
> >We don't want new requests from guest, so block the operation around the
> >nested poll.
> >
> >It also avoids looping forever when iothread is submitting a lot of requests.
> >
> >Signed-off-by: Fam Zheng <address@hidden>
> >---
> > block/io.c | 22 ++++++++++++++++++++--
> > 1 file changed, 20 insertions(+), 2 deletions(-)
>
> Hm, I don't know about this. When I see someone calling
> bdrv_drain()/bdrv_drain_all(), I'm expecting that every request has been
> drained afterwards. This patch implies that this is not necessarily the
> case, because apparently in some configurations the guest can still submit
> I/O even while bdrv_drain() is running,
In dataplane, aio_poll in bdrv_drain_all will poll the ioeventfd, which could
call the handlers of virtio queues. That's how guest I/O sneaks in.
> but this means that even after this
> patch, the same can happen if I/O is submitted after bdrv_op_unblock() and
> before anything the caller of bdrv_drain() wants to do while the BDS is
> still drained. So this looks to me more like the caller must ensure that the
> BDS won't receive new requests, and do so before bdrv_drain() is called.
Yes, callers of bdrv_drain*() should use a blocker like you reasoned. Other
patches in this series looked at qmp_transaction, but there are more, which may
still be wrong until they're fixed.
This patch, however, fixes one of the potential issues of those callers:
> >It also avoids looping forever when iothread is submitting a lot of
> >requests.
Fam
- [Qemu-devel] [PATCH v6 08/13] blockdev: Block device IO during internal snapshot transaction, (continued)
- [Qemu-devel] [PATCH v6 08/13] blockdev: Block device IO during internal snapshot transaction, Fam Zheng, 2015/05/21
- [Qemu-devel] [PATCH v6 09/13] blockdev: Block device IO during external snapshot transaction, Fam Zheng, 2015/05/21
- [Qemu-devel] [PATCH v6 10/13] blockdev: Block device IO during drive-backup transaction, Fam Zheng, 2015/05/21
- [Qemu-devel] [PATCH v6 11/13] blockdev: Block device IO during blockdev-backup transaction, Fam Zheng, 2015/05/21
- [Qemu-devel] [PATCH v6 12/13] block: Block "device IO" during bdrv_drain and bdrv_drain_all, Fam Zheng, 2015/05/21
- [Qemu-devel] [PATCH v6 13/13] block/mirror: Block "device IO" during mirror exit, Fam Zheng, 2015/05/21