qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 3/5] qcow2: Employ metadata overlap checks


From: Max Reitz
Subject: Re: [Qemu-devel] [PATCH v2 3/5] qcow2: Employ metadata overlap checks
Date: Thu, 29 Aug 2013 11:20:29 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130805 Thunderbird/17.0.8

Am 29.08.2013 11:18, schrieb Kevin Wolf:
Am 28.08.2013 um 16:55 hat Max Reitz geschrieben:
The pre-write overlap check function is now called before most of the
qcow2 writes (aborting it on collision or other error).

Signed-off-by: Max Reitz <address@hidden>
---
  block/qcow2-cache.c    | 17 +++++++++++++++++
  block/qcow2-cluster.c  | 21 +++++++++++++++++++++
  block/qcow2-snapshot.c | 22 ++++++++++++++++++++++
  block/qcow2.c          | 36 +++++++++++++++++++++++++++++++++++-
  4 files changed, 95 insertions(+), 1 deletion(-)
@@ -1753,10 +1779,18 @@ static int qcow2_save_vmstate(BlockDriverState *bs, 
QEMUIOVector *qiov,
      BDRVQcowState *s = bs->opaque;
      int growable = bs->growable;
      int ret;
+    int64_t offset = qcow2_vm_state_offset(s) + pos;
BLKDBG_EVENT(bs->file, BLKDBG_VMSTATE_SAVE);
      bs->growable = 1;
-    ret = bdrv_pwritev(bs, qcow2_vm_state_offset(s) + pos, qiov);
+
+    ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, offset,
+                                        qiov->size);
+    if (ret < 0) {
+        return ret;
+    }
+
+    ret = bdrv_pwritev(bs, offset, qiov);
      bs->growable = growable;
return ret;
Sorry for not catching it in v1, this one is actually wrong. The
bdrv_pwritev() is against bs, not bs->file, so you would be comparing
virtual/guest offsets with physical/host offsets.
Oh, yes, sorry; thanks for noticing. I do this mistake way too often – I think it's time for some regex to catch it…

Max



reply via email to

[Prev in Thread] Current Thread [Next in Thread]