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