[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 14/16] block/parallels: introduce ParallelsSnaps
From: |
Denis V. Lunev |
Subject: |
Re: [Qemu-devel] [PATCH 14/16] block/parallels: introduce ParallelsSnapshot data structure |
Date: |
Mon, 15 Dec 2014 16:32:48 +0300 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 |
On 15/12/14 15:45, Kevin Wolf wrote:
Am 15.12.2014 um 09:27 hat Denis V. Lunev geschrieben:
In order to support snapshots of parallels images we should maintain
snapshots list in BDRVParallelsState. Snapshots actually forms tree.
Though, in read-only case, we do need to traverse only from current
snapshot leaf to the snapshot tree root. Thus interesting for us
snapshots forms old good linked list.
This patch just introduces the structure for this and fills it with
a signle image as was done before.
s/signle/single/
True parsing be done in the next patch.
Signed-off-by: Denis V. Lunev <address@hidden>
CC: Jeff Cody <address@hidden>
CC: Kevin Wolf <address@hidden>
CC: Stefan Hajnoczi <address@hidden>
If I understand correctly, this is what actually describes the backing
file relationship. We should probably use the normal infrastructure for
this.
The challenge here seems to be that the single descriptor XML file
describes the complete chain of backing files. This is different from
the image formats that we support until now.
I think we need some design discussion here first before we even look at
code. Did you consider making the snapshots regular backing files, and
if so, what were the reasons that let you prefer a purely internal
solution?
Kevin
This implementation is borrowed from the current VMDK support.
The idea is exactly the same, see below. I have taken this as
a source of architecture approach as format is quite similar.
Anyway, I am very open to a discussion and solid architecture
approach here would be very good.
Regards,
Den
static int vmdk_probe(const uint8_t *buf, int buf_size, const char
*filename)
{
magic = be32_to_cpu(*(uint32_t *)buf);
if (magic == VMDK3_MAGIC ||
magic == VMDK4_MAGIC) {
return 100;
} else {
/* test descriptor parsing */
}
}
static int vmdk_open(BlockDriverState *bs, QDict *options, int flags,
Error **errp)
{
char *buf;
int ret;
BDRVVmdkState *s = bs->opaque;
uint32_t magic;
buf = vmdk_read_desc(bs->file, 0, errp);
if (!buf) {
return -EINVAL;
}
magic = ldl_be_p(buf);
switch (magic) {
case VMDK3_MAGIC:
case VMDK4_MAGIC:
ret = vmdk_open_sparse(bs, bs->file, flags, buf, errp);
s->desc_offset = 0x200;
break;
default:
ret = vmdk_open_desc_file(bs, flags, buf, errp);
break;
}
if (ret) {
goto fail;
}
...
static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf,
Error **errp)
{
....
ret = vmdk_parse_extents(buf, bs, bs->file->filename, errp);
....
}
static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
const char *desc_file_path, Error **errp)
{
....
while (*p) {
....
path_combine(extent_path, sizeof(extent_path),
desc_file_path, fname);
extent_file = NULL;
ret = bdrv_open(&extent_file, extent_path, NULL, NULL,
bs->open_flags | BDRV_O_PROTOCOL, NULL, errp);
...
/* save to extents array */
}
- [Qemu-devel] [PATCH 03/16] iotests, parallels: quote TEST_IMG in 076 test to be path-safe, (continued)
- [Qemu-devel] [PATCH 03/16] iotests, parallels: quote TEST_IMG in 076 test to be path-safe, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 16/16] iotests: testcase parallels image with snapshots, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 02/16] block/parallels: allow to specify DiskDescriptor.xml instead of image file, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 15/16] block/parallels: support read-only parallels snapshots, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 13/16] block/parallels: read disk size from XML if DiskDescriptor.xml is passed, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 14/16] block/parallels: introduce ParallelsSnapshot data structure, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 11/16] block/parallels: add support for backing files, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 10/16] block/parallels: add get_block_status, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 09/16] block/parallels: read up to cluster end in one go, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 12/16] iotests: testcase for backing in parallels format, Denis V. Lunev, 2014/12/15
- [Qemu-devel] [PATCH 08/16] block/parallels: switch to bdrv_read, Denis V. Lunev, 2014/12/15