block/parallels: Do not update header or truncate image when INMIGRATE
If we write or modify the image file while the QEMU run state is INMIGRATE, then the BDRV_O_INACTIVE BDS flag is set. This will cause an assert, since the image is marked inactive. Make sure we obey this flag. Tested-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Jeff Cody <jcody@redhat.com> Message-id: 3996c930fa8cde8570b7a63032720d76a28fd78b.1510059970.git.jcody@redhat.com Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Denis V. Lunev <den@openvz.org> Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
7479bf07c4
commit
6c7d390b99
@ -708,7 +708,7 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
|
|||||||
s->prealloc_mode = PRL_PREALLOC_MODE_FALLOCATE;
|
s->prealloc_mode = PRL_PREALLOC_MODE_FALLOCATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & BDRV_O_RDWR) {
|
if ((flags & BDRV_O_RDWR) && !(flags & BDRV_O_INACTIVE)) {
|
||||||
s->header->inuse = cpu_to_le32(HEADER_INUSE_MAGIC);
|
s->header->inuse = cpu_to_le32(HEADER_INUSE_MAGIC);
|
||||||
ret = parallels_update_header(bs);
|
ret = parallels_update_header(bs);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -741,12 +741,9 @@ static void parallels_close(BlockDriverState *bs)
|
|||||||
{
|
{
|
||||||
BDRVParallelsState *s = bs->opaque;
|
BDRVParallelsState *s = bs->opaque;
|
||||||
|
|
||||||
if (bs->open_flags & BDRV_O_RDWR) {
|
if ((bs->open_flags & BDRV_O_RDWR) && !(bs->open_flags & BDRV_O_INACTIVE)) {
|
||||||
s->header->inuse = 0;
|
s->header->inuse = 0;
|
||||||
parallels_update_header(bs);
|
parallels_update_header(bs);
|
||||||
}
|
|
||||||
|
|
||||||
if (bs->open_flags & BDRV_O_RDWR) {
|
|
||||||
bdrv_truncate(bs->file, s->data_end << BDRV_SECTOR_BITS,
|
bdrv_truncate(bs->file, s->data_end << BDRV_SECTOR_BITS,
|
||||||
PREALLOC_MODE_OFF, NULL);
|
PREALLOC_MODE_OFF, NULL);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user