mirror of https://github.com/xemu-project/xemu.git
qcow2: Add support for ImageInfoSpecific
Add a new ImageInfoSpecificQCow2 type as a subtype of ImageInfoSpecific. This contains the compatibility level as a string and an optional lazy_refcounts boolean (optional means mandatory for compat >= 1.1 and not available for compat == 0.10). Also, add qcow2_get_specific_info, which returns this information. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
a8d8ecb77f
commit
37764dfb71
|
@ -1810,6 +1810,33 @@ static int qcow2_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs)
|
||||||
|
{
|
||||||
|
BDRVQcowState *s = bs->opaque;
|
||||||
|
ImageInfoSpecific *spec_info = g_new(ImageInfoSpecific, 1);
|
||||||
|
|
||||||
|
*spec_info = (ImageInfoSpecific){
|
||||||
|
.kind = IMAGE_INFO_SPECIFIC_KIND_QCOW2,
|
||||||
|
{
|
||||||
|
.qcow2 = g_new(ImageInfoSpecificQCow2, 1),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
if (s->qcow_version == 2) {
|
||||||
|
*spec_info->qcow2 = (ImageInfoSpecificQCow2){
|
||||||
|
.compat = g_strdup("0.10"),
|
||||||
|
};
|
||||||
|
} else if (s->qcow_version == 3) {
|
||||||
|
*spec_info->qcow2 = (ImageInfoSpecificQCow2){
|
||||||
|
.compat = g_strdup("1.1"),
|
||||||
|
.lazy_refcounts = s->compatible_features &
|
||||||
|
QCOW2_COMPAT_LAZY_REFCOUNTS,
|
||||||
|
.has_lazy_refcounts = true,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return spec_info;
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static void dump_refcounts(BlockDriverState *bs)
|
static void dump_refcounts(BlockDriverState *bs)
|
||||||
{
|
{
|
||||||
|
@ -2130,6 +2157,7 @@ static BlockDriver bdrv_qcow2 = {
|
||||||
.bdrv_snapshot_list = qcow2_snapshot_list,
|
.bdrv_snapshot_list = qcow2_snapshot_list,
|
||||||
.bdrv_snapshot_load_tmp = qcow2_snapshot_load_tmp,
|
.bdrv_snapshot_load_tmp = qcow2_snapshot_load_tmp,
|
||||||
.bdrv_get_info = qcow2_get_info,
|
.bdrv_get_info = qcow2_get_info,
|
||||||
|
.bdrv_get_specific_info = qcow2_get_specific_info,
|
||||||
|
|
||||||
.bdrv_save_vmstate = qcow2_save_vmstate,
|
.bdrv_save_vmstate = qcow2_save_vmstate,
|
||||||
.bdrv_load_vmstate = qcow2_load_vmstate,
|
.bdrv_load_vmstate = qcow2_load_vmstate,
|
||||||
|
|
|
@ -209,6 +209,21 @@
|
||||||
'date-sec': 'int', 'date-nsec': 'int',
|
'date-sec': 'int', 'date-nsec': 'int',
|
||||||
'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } }
|
'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @ImageInfoSpecificQCow2:
|
||||||
|
#
|
||||||
|
# @compat: compatibility level
|
||||||
|
#
|
||||||
|
# @lazy-refcounts: #optional on or off; only valid for compat >= 1.1
|
||||||
|
#
|
||||||
|
# Since: 1.7
|
||||||
|
##
|
||||||
|
{ 'type': 'ImageInfoSpecificQCow2',
|
||||||
|
'data': {
|
||||||
|
'compat': 'str',
|
||||||
|
'*lazy-refcounts': 'bool'
|
||||||
|
} }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @ImageInfoSpecific:
|
# @ImageInfoSpecific:
|
||||||
#
|
#
|
||||||
|
@ -219,6 +234,7 @@
|
||||||
|
|
||||||
{ 'union': 'ImageInfoSpecific',
|
{ 'union': 'ImageInfoSpecific',
|
||||||
'data': {
|
'data': {
|
||||||
|
'qcow2': 'ImageInfoSpecificQCow2'
|
||||||
} }
|
} }
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
Loading…
Reference in New Issue