Revision e304e8e5
b/block/vmdk.c | ||
---|---|---|
813 | 813 |
|
814 | 814 |
static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data) |
815 | 815 |
{ |
816 |
uint32_t offset; |
|
817 |
QEMU_BUILD_BUG_ON(sizeof(offset) != sizeof(m_data->offset)); |
|
818 |
offset = cpu_to_le32(m_data->offset); |
|
816 | 819 |
/* update L2 table */ |
817 | 820 |
if (bdrv_pwrite_sync( |
818 | 821 |
extent->file, |
819 | 822 |
((int64_t)m_data->l2_offset * 512) |
820 | 823 |
+ (m_data->l2_index * sizeof(m_data->offset)), |
821 |
&(m_data->offset), |
|
822 |
sizeof(m_data->offset) |
|
823 |
) < 0) { |
|
824 |
&offset, sizeof(offset)) < 0) { |
|
824 | 825 |
return VMDK_ERROR; |
825 | 826 |
} |
826 | 827 |
/* update backup L2 table */ |
... | ... | |
830 | 831 |
extent->file, |
831 | 832 |
((int64_t)m_data->l2_offset * 512) |
832 | 833 |
+ (m_data->l2_index * sizeof(m_data->offset)), |
833 |
&(m_data->offset), sizeof(m_data->offset) |
|
834 |
) < 0) { |
|
834 |
&offset, sizeof(offset)) < 0) { |
|
835 | 835 |
return VMDK_ERROR; |
836 | 836 |
} |
837 | 837 |
} |
... | ... | |
848 | 848 |
{ |
849 | 849 |
unsigned int l1_index, l2_offset, l2_index; |
850 | 850 |
int min_index, i, j; |
851 |
uint32_t min_count, *l2_table, tmp = 0;
|
|
851 |
uint32_t min_count, *l2_table; |
|
852 | 852 |
bool zeroed = false; |
853 | 853 |
|
854 | 854 |
if (m_data) { |
... | ... | |
924 | 924 |
} |
925 | 925 |
|
926 | 926 |
*cluster_offset >>= 9; |
927 |
tmp = cpu_to_le32(*cluster_offset); |
|
928 |
l2_table[l2_index] = tmp; |
|
927 |
l2_table[l2_index] = cpu_to_le32(*cluster_offset); |
|
929 | 928 |
|
930 | 929 |
/* First of all we write grain itself, to avoid race condition |
931 | 930 |
* that may to corrupt the image. |
... | ... | |
938 | 937 |
} |
939 | 938 |
|
940 | 939 |
if (m_data) { |
941 |
m_data->offset = tmp;
|
|
940 |
m_data->offset = *cluster_offset;
|
|
942 | 941 |
m_data->l1_index = l1_index; |
943 | 942 |
m_data->l2_index = l2_index; |
944 | 943 |
m_data->l2_offset = l2_offset; |
Also available in: Unified diff