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 --- |