[libvirt] [PATCH] Do a correct format mapping of partitions
Daniel P. Berrange
berrange at redhat.com
Tue Jun 23 09:23:15 UTC 2009
On Mon, Jun 22, 2009 at 06:31:38PM +0200, Henrik Persson E wrote:
>
> This patch reads the partition type and sets the correct target format
> of the storage volume when based on physical disk.
I think the general idea you're trying to implement looks reasonable,
but this patch you posted has been white-space damaged by your email
client. Can you re-post it.
Also, its useful when generating diff's to use the '-p' flag so that
the patch includs the function name, eg
diff -rupN libvirt-0.6.4.orig libvirt-0.6.4.new
Regards,
Daniel
>
> --- libvirt-0.6.4.org/src/parthelper.c 2008-09-02 11:24:21.000000000
> +0200
> +++ libvirt-0.6.4/src/parthelper.c 2009-06-22 16:29:49.108681000
> +0200
> @@ -67,6 +67,7 @@
> while (part) {
> const char *type;
> const char *content;
> + int partType = 0;
> if (part->type & PED_PARTITION_LOGICAL) {
> type = "logical";
> if (part->type & PED_PARTITION_FREESPACE)
> @@ -92,26 +93,35 @@
> content = "data";
> }
>
> + /* Get partition type */
> + if(ped_partition_is_active(part)) {
> + if(ped_partition_is_flag_available(part,
> PED_PARTITION_TYPE)) {
> + partType =
> ped_partition_get_flag(part,PED_PARTITION_TYPE);
> + }
> + }
> +
> /* We do +1 on geom.end, because we want end of the last sector
> * in bytes, not the last sector number
> */
> if (part->num != -1) {
> - printf("%s%d%c%s%c%s%c%llu%c%llu%c%llu%c",
> + printf("%s%d%c%s%c%s%c%llu%c%llu%c%llu%c%d%c",
> part->geom.dev->path,
> part->num, '\0',
> type, '\0',
> content, '\0',
> part->geom.start * 512llu, '\0',
> (part->geom.end + 1 ) * 512llu, '\0',
> - part->geom.length * 512llu, '\0');
> + part->geom.length * 512llu, '\0',
> + partType, '\0');
> } else {
> - printf("%s%c%s%c%s%c%llu%c%llu%c%llu%c",
> + printf("%s%c%s%c%s%c%llu%c%llu%c%llu%c%d%c",
> "-", '\0',
> type, '\0',
> content, '\0',
> part->geom.start * 512llu, '\0',
> (part->geom.end + 1 ) * 512llu, '\0',
> - part->geom.length * 512llu, '\0');
> + part->geom.length * 512llu, '\0',
> + partType, '\0');
> }
> part = ped_disk_next_partition(disk, part);
> }
> --- libvirt-0.6.4.org/src/storage_backend_disk.c 2009-04-02
> 11:50:10.000000000 +0200
> +++ libvirt-0.6.4/src/storage_backend_disk.c 2009-06-22
> 18:25:14.095095000 +0200
> @@ -36,6 +36,35 @@
>
> #define PARTHELPER BINDIR "/libvirt_parthelper"
>
> +/* Map partition types to internal enum */
> +static int
> +virStorageBackendDiskMapPartitionType(const char* partType)
> +{
> + switch(atoi(partType)) {
> + case 0x05:
> + case 0x0f:
> + return VIR_STORAGE_VOL_DISK_EXTENDED;
> + case 0x06:
> + case 0x0e:
> + return VIR_STORAGE_VOL_DISK_FAT16;
> + case 0x0b:
> + case 0x0c:
> + return VIR_STORAGE_VOL_DISK_FAT32;
> + case 0x82:
> + return VIR_STORAGE_VOL_DISK_LINUX_SWAP;
> + case 0x83:
> + return VIR_STORAGE_VOL_DISK_LINUX;
> + case 0x8e:
> + return VIR_STORAGE_VOL_DISK_LINUX_LVM;
> + case 0xfd:
> + return VIR_STORAGE_VOL_DISK_LINUX_RAID;
> + default:
> + return VIR_STORAGE_VOL_DISK_NONE;
> +
> + }
> +}
> +
> +
> static int
> virStorageBackendDiskMakeDataVol(virConnectPtr conn,
> virStoragePoolObjPtr pool,
> @@ -128,6 +157,9 @@
> if (virStorageBackendUpdateVolInfo(conn, vol, 1) < 0)
> return -1;
>
> + /* virStorageBackendUpdateVolInfo sets format incorrect for
> partitions */
> + vol->target.format =
> virStorageBackendDiskMapPartitionType(groups[6]);
> +
> vol->type = VIR_STORAGE_VOL_BLOCK;
>
> /* The above gets allocation wrong for
> @@ -250,7 +282,7 @@
> return virStorageBackendRunProgNul(conn,
> pool,
> prog,
> - 6,
> + 7,
> virStorageBackendDiskMakeVol,
> vol);
> }
>
>
>
>
> --
> Libvir-list mailing list
> Libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list