diff options
author | Kevin Wolf <kwolf@redhat.com> | 2010-05-28 09:47:44 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2010-05-28 13:29:13 +0200 |
commit | ed0df867d93341289d085ed9e9d44907e342c7ff (patch) | |
tree | f661840d721c3f87b282badf41b5dc0f38ed383a /block | |
parent | 55c17e9821c474d5fcdebdc82ed2fc096777d611 (diff) |
qcow2: Return right error code in write_refcount_block_entries
write_refcount_block_entries used to return -EIO for any errors. Change this to
return the real error code.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/qcow2-refcount.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 744107cd1d..a7f295d933 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -404,6 +404,7 @@ static int write_refcount_block_entries(BlockDriverState *bs, { BDRVQcowState *s = bs->opaque; size_t size; + int ret; if (cache_refcount_updates) { return 0; @@ -414,12 +415,13 @@ static int write_refcount_block_entries(BlockDriverState *bs, & ~(REFCOUNTS_PER_SECTOR - 1); size = (last_index - first_index) << REFCOUNT_SHIFT; + BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_UPDATE_PART); - if (bdrv_pwrite(bs->file, + ret = bdrv_pwrite(bs->file, refcount_block_offset + (first_index << REFCOUNT_SHIFT), - &s->refcount_block_cache[first_index], size) != size) - { - return -EIO; + &s->refcount_block_cache[first_index], size); + if (ret < 0) { + return ret; } return 0; @@ -460,10 +462,10 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, table_index = cluster_index >> (s->cluster_bits - REFCOUNT_SHIFT); if ((old_table_index >= 0) && (table_index != old_table_index)) { - if (write_refcount_block_entries(bs, refcount_block_offset, - first_index, last_index) < 0) - { - return -EIO; + ret = write_refcount_block_entries(bs, refcount_block_offset, + first_index, last_index); + if (ret < 0) { + return ret; } first_index = -1; @@ -505,10 +507,11 @@ fail: /* Write last changed block to disk */ if (refcount_block_offset != 0) { - if (write_refcount_block_entries(bs, refcount_block_offset, - first_index, last_index) < 0) - { - return ret < 0 ? ret : -EIO; + int wret; + wret = write_refcount_block_entries(bs, refcount_block_offset, + first_index, last_index); + if (wret < 0) { + return ret < 0 ? ret : wret; } } |