vhdx.c (32cc71def9e3885f9527af713e6d8dc7521ddc08) vhdx.c (a9262f551eba44d4d0f9e396d7124c059a93e204)
1/*
2 * Block driver for Hyper-V VHDX Images
3 *
4 * Copyright (c) 2013 Red Hat, Inc.,
5 *
6 * Authors:
7 * Jeff Cody <jcody@redhat.com>
8 *

--- 1651 unchanged lines hidden (view full) ---

1660
1661 md_table_entry[4].item_id = phys_sector_guid;
1662 md_table_entry[4].offset = offset;
1663 md_table_entry[4].length = sizeof(VHDXVirtualDiskPhysicalSectorSize);
1664 md_table_entry[4].data_bits |= VHDX_META_FLAGS_IS_REQUIRED |
1665 VHDX_META_FLAGS_IS_VIRTUAL_DISK;
1666 vhdx_metadata_entry_le_export(&md_table_entry[4]);
1667
1/*
2 * Block driver for Hyper-V VHDX Images
3 *
4 * Copyright (c) 2013 Red Hat, Inc.,
5 *
6 * Authors:
7 * Jeff Cody <jcody@redhat.com>
8 *

--- 1651 unchanged lines hidden (view full) ---

1660
1661 md_table_entry[4].item_id = phys_sector_guid;
1662 md_table_entry[4].offset = offset;
1663 md_table_entry[4].length = sizeof(VHDXVirtualDiskPhysicalSectorSize);
1664 md_table_entry[4].data_bits |= VHDX_META_FLAGS_IS_REQUIRED |
1665 VHDX_META_FLAGS_IS_VIRTUAL_DISK;
1666 vhdx_metadata_entry_le_export(&md_table_entry[4]);
1667
1668 ret = blk_pwrite(blk, metadata_offset, buffer, VHDX_HEADER_BLOCK_SIZE, 0);
1668 ret = blk_pwrite(blk, metadata_offset, VHDX_HEADER_BLOCK_SIZE, buffer, 0);
1669 if (ret < 0) {
1670 goto exit;
1671 }
1672
1669 if (ret < 0) {
1670 goto exit;
1671 }
1672
1673 ret = blk_pwrite(blk, metadata_offset + (64 * KiB), entry_buffer,
1674 VHDX_METADATA_ENTRY_BUFFER_SIZE, 0);
1673 ret = blk_pwrite(blk, metadata_offset + (64 * KiB),
1674 VHDX_METADATA_ENTRY_BUFFER_SIZE, entry_buffer, 0);
1675 if (ret < 0) {
1676 goto exit;
1677 }
1678
1679
1680exit:
1681 g_free(buffer);
1682 g_free(entry_buffer);

--- 68 unchanged lines hidden (view full) ---

1751 sinfo.file_offset = data_file_offset +
1752 (sector_num << s->logical_sector_size_bits);
1753 sinfo.file_offset = ROUND_UP(sinfo.file_offset, MiB);
1754 vhdx_update_bat_table_entry(blk_bs(blk), s, &sinfo, &unused, &unused,
1755 block_state);
1756 s->bat[sinfo.bat_idx] = cpu_to_le64(s->bat[sinfo.bat_idx]);
1757 sector_num += s->sectors_per_block;
1758 }
1675 if (ret < 0) {
1676 goto exit;
1677 }
1678
1679
1680exit:
1681 g_free(buffer);
1682 g_free(entry_buffer);

--- 68 unchanged lines hidden (view full) ---

1751 sinfo.file_offset = data_file_offset +
1752 (sector_num << s->logical_sector_size_bits);
1753 sinfo.file_offset = ROUND_UP(sinfo.file_offset, MiB);
1754 vhdx_update_bat_table_entry(blk_bs(blk), s, &sinfo, &unused, &unused,
1755 block_state);
1756 s->bat[sinfo.bat_idx] = cpu_to_le64(s->bat[sinfo.bat_idx]);
1757 sector_num += s->sectors_per_block;
1758 }
1759 ret = blk_pwrite(blk, file_offset, s->bat, length, 0);
1759 ret = blk_pwrite(blk, file_offset, length, s->bat, 0);
1760 if (ret < 0) {
1761 error_setg_errno(errp, -ret, "Failed to write the BAT");
1762 goto exit;
1763 }
1764 }
1765
1766
1767

--- 87 unchanged lines hidden (view full) ---

1855 * so do that now */
1856 ret = vhdx_create_bat(blk, s, image_size, type, use_zero_blocks,
1857 bat_file_offset, bat_length, errp);
1858 if (ret < 0) {
1859 goto exit;
1860 }
1861
1862 /* Now write out the region headers to disk */
1760 if (ret < 0) {
1761 error_setg_errno(errp, -ret, "Failed to write the BAT");
1762 goto exit;
1763 }
1764 }
1765
1766
1767

--- 87 unchanged lines hidden (view full) ---

1855 * so do that now */
1856 ret = vhdx_create_bat(blk, s, image_size, type, use_zero_blocks,
1857 bat_file_offset, bat_length, errp);
1858 if (ret < 0) {
1859 goto exit;
1860 }
1861
1862 /* Now write out the region headers to disk */
1863 ret = blk_pwrite(blk, VHDX_REGION_TABLE_OFFSET, buffer,
1864 VHDX_HEADER_BLOCK_SIZE, 0);
1863 ret = blk_pwrite(blk, VHDX_REGION_TABLE_OFFSET, VHDX_HEADER_BLOCK_SIZE,
1864 buffer, 0);
1865 if (ret < 0) {
1866 error_setg_errno(errp, -ret, "Failed to write first region table");
1867 goto exit;
1868 }
1869
1865 if (ret < 0) {
1866 error_setg_errno(errp, -ret, "Failed to write first region table");
1867 goto exit;
1868 }
1869
1870 ret = blk_pwrite(blk, VHDX_REGION_TABLE2_OFFSET, buffer,
1871 VHDX_HEADER_BLOCK_SIZE, 0);
1870 ret = blk_pwrite(blk, VHDX_REGION_TABLE2_OFFSET, VHDX_HEADER_BLOCK_SIZE,
1871 buffer, 0);
1872 if (ret < 0) {
1873 error_setg_errno(errp, -ret, "Failed to write second region table");
1874 goto exit;
1875 }
1876
1877exit:
1878 g_free(s);
1879 g_free(buffer);

--- 127 unchanged lines hidden (view full) ---

2007
2008 /* Create (A) */
2009
2010 /* The creator field is optional, but may be useful for
2011 * debugging / diagnostics */
2012 creator = g_utf8_to_utf16("QEMU v" QEMU_VERSION, -1, NULL,
2013 &creator_items, NULL);
2014 signature = cpu_to_le64(VHDX_FILE_SIGNATURE);
1872 if (ret < 0) {
1873 error_setg_errno(errp, -ret, "Failed to write second region table");
1874 goto exit;
1875 }
1876
1877exit:
1878 g_free(s);
1879 g_free(buffer);

--- 127 unchanged lines hidden (view full) ---

2007
2008 /* Create (A) */
2009
2010 /* The creator field is optional, but may be useful for
2011 * debugging / diagnostics */
2012 creator = g_utf8_to_utf16("QEMU v" QEMU_VERSION, -1, NULL,
2013 &creator_items, NULL);
2014 signature = cpu_to_le64(VHDX_FILE_SIGNATURE);
2015 ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET, &signature, sizeof(signature),
2015 ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET, sizeof(signature), &signature,
2016 0);
2017 if (ret < 0) {
2018 error_setg_errno(errp, -ret, "Failed to write file signature");
2019 goto delete_and_exit;
2020 }
2021 if (creator) {
2022 ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET + sizeof(signature),
2016 0);
2017 if (ret < 0) {
2018 error_setg_errno(errp, -ret, "Failed to write file signature");
2019 goto delete_and_exit;
2020 }
2021 if (creator) {
2022 ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET + sizeof(signature),
2023 creator, creator_items * sizeof(gunichar2), 0);
2023 creator_items * sizeof(gunichar2), creator, 0);
2024 if (ret < 0) {
2025 error_setg_errno(errp, -ret, "Failed to write creator field");
2026 goto delete_and_exit;
2027 }
2028 }
2029
2030
2031 /* Creates (B),(C) */

--- 232 unchanged lines hidden ---
2024 if (ret < 0) {
2025 error_setg_errno(errp, -ret, "Failed to write creator field");
2026 goto delete_and_exit;
2027 }
2028 }
2029
2030
2031 /* Creates (B),(C) */

--- 232 unchanged lines hidden ---