Revision 8b3b7206 block/qcow2-cluster.c
b/block/qcow2-cluster.c | ||
---|---|---|
64 | 64 |
BLKDBG_EVENT(bs->file, BLKDBG_L1_GROW_WRITE_TABLE); |
65 | 65 |
for(i = 0; i < s->l1_size; i++) |
66 | 66 |
new_l1_table[i] = cpu_to_be64(new_l1_table[i]); |
67 |
ret = bdrv_pwrite(bs->file, new_l1_table_offset, new_l1_table, new_l1_size2); |
|
68 |
if (ret != new_l1_size2)
|
|
67 |
ret = bdrv_pwrite_sync(bs->file, new_l1_table_offset, new_l1_table, new_l1_size2);
|
|
68 |
if (ret < 0)
|
|
69 | 69 |
goto fail; |
70 | 70 |
for(i = 0; i < s->l1_size; i++) |
71 | 71 |
new_l1_table[i] = be64_to_cpu(new_l1_table[i]); |
... | ... | |
74 | 74 |
BLKDBG_EVENT(bs->file, BLKDBG_L1_GROW_ACTIVATE_TABLE); |
75 | 75 |
cpu_to_be32w((uint32_t*)data, new_l1_size); |
76 | 76 |
cpu_to_be64w((uint64_t*)(data + 4), new_l1_table_offset); |
77 |
ret = bdrv_pwrite(bs->file, offsetof(QCowHeader, l1_size), data,sizeof(data)); |
|
78 |
if (ret != sizeof(data)) {
|
|
77 |
ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_size), data,sizeof(data));
|
|
78 |
if (ret < 0) {
|
|
79 | 79 |
goto fail; |
80 | 80 |
} |
81 | 81 |
qemu_free(s->l1_table); |
... | ... | |
87 | 87 |
fail: |
88 | 88 |
qemu_free(new_l1_table); |
89 | 89 |
qcow2_free_clusters(bs, new_l1_table_offset, new_l1_size2); |
90 |
return ret < 0 ? ret : -EIO;
|
|
90 |
return ret; |
|
91 | 91 |
} |
92 | 92 |
|
93 | 93 |
void qcow2_l2_cache_reset(BlockDriverState *bs) |
... | ... | |
207 | 207 |
} |
208 | 208 |
|
209 | 209 |
BLKDBG_EVENT(bs->file, BLKDBG_L1_UPDATE); |
210 |
ret = bdrv_pwrite(bs->file, s->l1_table_offset + 8 * l1_start_index, |
|
210 |
ret = bdrv_pwrite_sync(bs->file, s->l1_table_offset + 8 * l1_start_index,
|
|
211 | 211 |
buf, sizeof(buf)); |
212 | 212 |
if (ret < 0) { |
213 | 213 |
return ret; |
... | ... | |
263 | 263 |
} |
264 | 264 |
/* write the l2 table to the file */ |
265 | 265 |
BLKDBG_EVENT(bs->file, BLKDBG_L2_ALLOC_WRITE); |
266 |
ret = bdrv_pwrite(bs->file, l2_offset, l2_table, |
|
266 |
ret = bdrv_pwrite_sync(bs->file, l2_offset, l2_table,
|
|
267 | 267 |
s->l2_size * sizeof(uint64_t)); |
268 | 268 |
if (ret < 0) { |
269 | 269 |
goto fail; |
... | ... | |
413 | 413 |
&s->aes_encrypt_key); |
414 | 414 |
} |
415 | 415 |
BLKDBG_EVENT(bs->file, BLKDBG_COW_WRITE); |
416 |
ret = bdrv_write(bs->file, (cluster_offset >> 9) + n_start, |
|
417 |
s->cluster_data, n);
|
|
416 |
ret = bdrv_write_sync(bs->file, (cluster_offset >> 9) + n_start,
|
|
417 |
s->cluster_data, n); |
|
418 | 418 |
if (ret < 0) |
419 | 419 |
return ret; |
420 | 420 |
return 0; |
... | ... | |
631 | 631 |
|
632 | 632 |
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE_COMPRESSED); |
633 | 633 |
l2_table[l2_index] = cpu_to_be64(cluster_offset); |
634 |
if (bdrv_pwrite(bs->file, |
|
634 |
if (bdrv_pwrite_sync(bs->file,
|
|
635 | 635 |
l2_offset + l2_index * sizeof(uint64_t), |
636 | 636 |
l2_table + l2_index, |
637 |
sizeof(uint64_t)) != sizeof(uint64_t))
|
|
637 |
sizeof(uint64_t)) < 0)
|
|
638 | 638 |
return 0; |
639 | 639 |
|
640 | 640 |
return cluster_offset; |
... | ... | |
655 | 655 |
int ret; |
656 | 656 |
|
657 | 657 |
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE); |
658 |
ret = bdrv_pwrite(bs->file, l2_offset + start_offset, |
|
658 |
ret = bdrv_pwrite_sync(bs->file, l2_offset + start_offset,
|
|
659 | 659 |
&l2_table[l2_start_index], len); |
660 | 660 |
if (ret < 0) { |
661 | 661 |
return ret; |
Also available in: Unified diff