diff options
author | Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> | 2012-08-09 13:05:56 +0100 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2012-08-10 10:25:12 +0200 |
commit | 058f8f16db0c1c528b665a6283457f019c8b0926 (patch) | |
tree | cf49eb0701d42ae865a1156354112f29e5800929 /block | |
parent | acbe59829e448aa63bdccc6ee484b7e1ac605e25 (diff) | |
download | qemu-058f8f16db0c1c528b665a6283457f019c8b0926.zip qemu-058f8f16db0c1c528b665a6283457f019c8b0926.tar.gz qemu-058f8f16db0c1c528b665a6283457f019c8b0926.tar.bz2 |
block: add BLOCK_O_CHECK for qemu-img check
Image formats with a dirty bit, like qed and qcow2, repair dirty image
files upon open with BDRV_O_RDWR. Performing automatic repair when
qemu-img check runs is not ideal because the bdrv_open() call repairs
the image before the actual bdrv_check() call from qemu-img.c.
Fix this "double repair" since it leads to confusing output from
qemu-img check. Tell the block driver that this image is being opened
just for bdrv_check(). This skips automatic repair and qemu-img.c can
invoke it manually with bdrv_check().
Update the golden output for qemu-iotests 039 to reflect the new
qemu-img check output.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/qcow2.c | 4 | ||||
-rw-r--r-- | block/qed.c | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/block/qcow2.c b/block/qcow2.c index 5896fd6..8f183f1 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -484,8 +484,8 @@ static int qcow2_open(BlockDriverState *bs, int flags) qemu_co_mutex_init(&s->lock); /* Repair image if dirty */ - if ((s->incompatible_features & QCOW2_INCOMPAT_DIRTY) && - !bs->read_only) { + if (!(flags & BDRV_O_CHECK) && !bs->read_only && + (s->incompatible_features & QCOW2_INCOMPAT_DIRTY)) { BdrvCheckResult result = {0}; ret = qcow2_check(bs, &result, BDRV_FIX_ERRORS); diff --git a/block/qed.c b/block/qed.c index 226545d..a02dbfd 100644 --- a/block/qed.c +++ b/block/qed.c @@ -477,7 +477,7 @@ static int bdrv_qed_open(BlockDriverState *bs, int flags) } /* If image was not closed cleanly, check consistency */ - if (s->header.features & QED_F_NEED_CHECK) { + if (!(flags & BDRV_O_CHECK) && (s->header.features & QED_F_NEED_CHECK)) { /* Read-only images cannot be fixed. There is no risk of corruption * since write operations are not possible. Therefore, allow * potentially inconsistent images to be opened read-only. This can |