Revision 16372ff0
b/block/vmdk.c | ||
---|---|---|
716 | 716 |
return -errno; |
717 | 717 |
magic = cpu_to_be32(VMDK4_MAGIC); |
718 | 718 |
memset(&header, 0, sizeof(header)); |
719 |
header.version = cpu_to_le32(1);
|
|
720 |
header.flags = cpu_to_le32(3); /* ?? */
|
|
721 |
header.capacity = cpu_to_le64(total_size);
|
|
722 |
header.granularity = cpu_to_le64(128);
|
|
723 |
header.num_gtes_per_gte = cpu_to_le32(512);
|
|
719 |
header.version = 1;
|
|
720 |
header.flags = 3; /* ?? */
|
|
721 |
header.capacity = total_size;
|
|
722 |
header.granularity = 128;
|
|
723 |
header.num_gtes_per_gte = 512;
|
|
724 | 724 |
|
725 | 725 |
grains = (total_size + header.granularity - 1) / header.granularity; |
726 | 726 |
gt_size = ((header.num_gtes_per_gte * sizeof(uint32_t)) + 511) >> 9; |
... | ... | |
736 | 736 |
header.granularity - 1) / header.granularity) * |
737 | 737 |
header.granularity; |
738 | 738 |
|
739 |
/* swap endianness for all header fields */ |
|
740 |
header.version = cpu_to_le32(header.version); |
|
741 |
header.flags = cpu_to_le32(header.flags); |
|
742 |
header.capacity = cpu_to_le64(header.capacity); |
|
743 |
header.granularity = cpu_to_le64(header.granularity); |
|
744 |
header.num_gtes_per_gte = cpu_to_le32(header.num_gtes_per_gte); |
|
739 | 745 |
header.desc_offset = cpu_to_le64(header.desc_offset); |
740 | 746 |
header.desc_size = cpu_to_le64(header.desc_size); |
741 | 747 |
header.rgd_offset = cpu_to_le64(header.rgd_offset); |
... | ... | |
759 | 765 |
goto exit; |
760 | 766 |
} |
761 | 767 |
|
762 |
ret = ftruncate(fd, header.grain_offset << 9);
|
|
768 |
ret = ftruncate(fd, le64_to_cpu(header.grain_offset) << 9);
|
|
763 | 769 |
if (ret < 0) { |
764 | 770 |
ret = -errno; |
765 | 771 |
goto exit; |
... | ... | |
767 | 773 |
|
768 | 774 |
/* write grain directory */ |
769 | 775 |
lseek(fd, le64_to_cpu(header.rgd_offset) << 9, SEEK_SET); |
770 |
for (i = 0, tmp = header.rgd_offset + gd_size;
|
|
776 |
for (i = 0, tmp = le64_to_cpu(header.rgd_offset) + gd_size;
|
|
771 | 777 |
i < gt_count; i++, tmp += gt_size) { |
772 | 778 |
ret = qemu_write_full(fd, &tmp, sizeof(tmp)); |
773 | 779 |
if (ret != sizeof(tmp)) { |
... | ... | |
778 | 784 |
|
779 | 785 |
/* write backup grain directory */ |
780 | 786 |
lseek(fd, le64_to_cpu(header.gd_offset) << 9, SEEK_SET); |
781 |
for (i = 0, tmp = header.gd_offset + gd_size;
|
|
787 |
for (i = 0, tmp = le64_to_cpu(header.gd_offset) + gd_size;
|
|
782 | 788 |
i < gt_count; i++, tmp += gt_size) { |
783 | 789 |
ret = qemu_write_full(fd, &tmp, sizeof(tmp)); |
784 | 790 |
if (ret != sizeof(tmp)) { |
Also available in: Unified diff