block/qcow2: implement blockdev-amend
Currently the implementation only supports amending the encryption options, unlike the qemu-img version Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-Id: <20200608094030.670121-14-mlevitsk@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
30da9dd88a
commit
8ea1613d91
|
@ -5596,6 +5596,44 @@ static int qcow2_amend_options(BlockDriverState *bs, QemuOpts *opts,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int coroutine_fn qcow2_co_amend(BlockDriverState *bs,
|
||||||
|
BlockdevAmendOptions *opts,
|
||||||
|
bool force,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
BlockdevAmendOptionsQcow2 *qopts = &opts->u.qcow2;
|
||||||
|
BDRVQcow2State *s = bs->opaque;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (qopts->has_encrypt) {
|
||||||
|
if (!s->crypto) {
|
||||||
|
error_setg(errp, "image is not encrypted, can't amend");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qopts->encrypt->format != Q_CRYPTO_BLOCK_FORMAT_LUKS) {
|
||||||
|
error_setg(errp,
|
||||||
|
"Amend can't be used to change the qcow2 encryption format");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s->crypt_method_header != QCOW_CRYPT_LUKS) {
|
||||||
|
error_setg(errp,
|
||||||
|
"Only LUKS encryption options can be amended for qcow2 with blockdev-amend");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = qcrypto_block_amend_options(s->crypto,
|
||||||
|
qcow2_crypto_hdr_read_func,
|
||||||
|
qcow2_crypto_hdr_write_func,
|
||||||
|
bs,
|
||||||
|
qopts->encrypt,
|
||||||
|
force,
|
||||||
|
errp);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If offset or size are negative, respectively, they will not be included in
|
* If offset or size are negative, respectively, they will not be included in
|
||||||
* the BLOCK_IMAGE_CORRUPTED event emitted.
|
* the BLOCK_IMAGE_CORRUPTED event emitted.
|
||||||
|
@ -5813,6 +5851,7 @@ BlockDriver bdrv_qcow2 = {
|
||||||
.mutable_opts = mutable_opts,
|
.mutable_opts = mutable_opts,
|
||||||
.bdrv_co_check = qcow2_co_check,
|
.bdrv_co_check = qcow2_co_check,
|
||||||
.bdrv_amend_options = qcow2_amend_options,
|
.bdrv_amend_options = qcow2_amend_options,
|
||||||
|
.bdrv_co_amend = qcow2_co_amend,
|
||||||
|
|
||||||
.bdrv_detach_aio_context = qcow2_detach_aio_context,
|
.bdrv_detach_aio_context = qcow2_detach_aio_context,
|
||||||
.bdrv_attach_aio_context = qcow2_attach_aio_context,
|
.bdrv_attach_aio_context = qcow2_attach_aio_context,
|
||||||
|
|
|
@ -4686,6 +4686,19 @@
|
||||||
'data': { }
|
'data': { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# @BlockdevAmendOptionsQcow2:
|
||||||
|
#
|
||||||
|
# Driver specific image amend options for qcow2.
|
||||||
|
# For now, only encryption options can be amended
|
||||||
|
#
|
||||||
|
# @encrypt Encryption options to be amended
|
||||||
|
#
|
||||||
|
# Since: 5.1
|
||||||
|
##
|
||||||
|
{ 'struct': 'BlockdevAmendOptionsQcow2',
|
||||||
|
'data': { '*encrypt': 'QCryptoBlockAmendOptions' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @BlockdevAmendOptions:
|
# @BlockdevAmendOptions:
|
||||||
#
|
#
|
||||||
|
@ -4700,7 +4713,8 @@
|
||||||
'driver': 'BlockdevDriver' },
|
'driver': 'BlockdevDriver' },
|
||||||
'discriminator': 'driver',
|
'discriminator': 'driver',
|
||||||
'data': {
|
'data': {
|
||||||
'luks': 'BlockdevAmendOptionsLUKS' } }
|
'luks': 'BlockdevAmendOptionsLUKS',
|
||||||
|
'qcow2': 'BlockdevAmendOptionsQcow2' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @x-blockdev-amend:
|
# @x-blockdev-amend:
|
||||||
|
|
Loading…
Reference in New Issue