[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 09/15] Fix migration in case of scsi-generic
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 09/15] Fix migration in case of scsi-generic |
Date: |
Wed, 24 Jun 2015 16:28:00 +0100 |
From: Dimitris Aragiorgis <address@hidden>
During migration, QEMU uses fsync()/fdatasync() on the open file
descriptor for read-write block devices to flush data just before
stopping the VM.
However, fsync() on a scsi-generic device returns -EINVAL which
causes the migration to fail. This patch skips flushing data in case
of an SG device, since submitting SCSI commands directly via an SG
character device (e.g. /dev/sg0) bypasses the page cache completely,
anyway.
Note that fsync() not only flushes the page cache but also the disk
cache. The scsi-generic device never sends flushes, and for
migration it assumes that the same SCSI device is used by the
destination host, so it does not issue any SCSI SYNCHRONIZE CACHE
(10) command.
Finally, remove the bdrv_is_sg() test from iscsi_co_flush() since
this is now redundant (we flush the underlying protocol at the end
of bdrv_co_flush() which, with this patch, we never reach).
Signed-off-by: Dimitris Aragiorgis <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
block/io.c | 3 ++-
block/iscsi.c | 4 ----
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/block/io.c b/block/io.c
index 43f85ab..e295992 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2265,7 +2265,8 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
{
int ret;
- if (!bs || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
+ if (!bs || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs) ||
+ bdrv_is_sg(bs)) {
return 0;
}
diff --git a/block/iscsi.c b/block/iscsi.c
index aff8198..49cee4d 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -628,10 +628,6 @@ static int coroutine_fn iscsi_co_flush(BlockDriverState
*bs)
IscsiLun *iscsilun = bs->opaque;
struct IscsiTask iTask;
- if (bdrv_is_sg(bs)) {
- return 0;
- }
-
if (!iscsilun->force_next_flush) {
return 0;
}
--
2.4.3
- [Qemu-devel] [PULL 00/15] Block patches, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 02/15] throttle: Check current timers before updating any_timer_armed[], Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 01/15] block: Let bdrv_drain_all() to call aio_poll() for each AioContext, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 03/15] block-backend: Introduce blk_drain(), Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 04/15] virtio-blk: Use blk_drain() to drain IO requests, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 05/15] util/hbitmap: Add an API to reset all set bits in hbitmap, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 07/15] nvme: Fix memleak in nvme_dma_read_prp, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 06/15] vvfat: add a label option, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 08/15] block: Use bdrv_is_sg() everywhere, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 09/15] Fix migration in case of scsi-generic,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 10/15] raw-posix: DPRINTF instead of DEBUG_BLOCK_PRINT, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 11/15] raw-posix: Use DPRINTF for DEBUG_FLOPPY, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 13/15] iov: don't touch iov in iov_send_recv(), Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 12/15] raw-posix: Introduce hdev_is_sg(), Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 14/15] qemu-iotests: fix 051.out after qdev error message change, Stefan Hajnoczi, 2015/06/24
- [Qemu-devel] [PULL 15/15] virito-blk: drop duplicate check, Stefan Hajnoczi, 2015/06/24
- Re: [Qemu-devel] [PULL 00/15] Block patches, Peter Maydell, 2015/06/25