qcow2: Return useful error code in refcount_init()

If bdrv_pread() returns an error, it is very unlikely that it was
ENOMEM. In this case, the return value should be passed along; as
bdrv_pread() will always either return the number of bytes read or a
negative value (the error code), the condition for checking whether
bdrv_pread() failed can be simplified (and clarified) as well.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
This commit is contained in:
Max Reitz 2014-05-29 00:19:54 +02:00 committed by Kevin Wolf
parent 7504edf477
commit 8fcffa9853

View File

@ -50,19 +50,21 @@ int qcow2_refcount_init(BlockDriverState *bs)
if (s->refcount_table_size > 0) { if (s->refcount_table_size > 0) {
if (s->refcount_table == NULL) { if (s->refcount_table == NULL) {
ret = -ENOMEM;
goto fail; goto fail;
} }
BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_LOAD); BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_LOAD);
ret = bdrv_pread(bs->file, s->refcount_table_offset, ret = bdrv_pread(bs->file, s->refcount_table_offset,
s->refcount_table, refcount_table_size2); s->refcount_table, refcount_table_size2);
if (ret != refcount_table_size2) if (ret < 0) {
goto fail; goto fail;
}
for(i = 0; i < s->refcount_table_size; i++) for(i = 0; i < s->refcount_table_size; i++)
be64_to_cpus(&s->refcount_table[i]); be64_to_cpus(&s->refcount_table[i]);
} }
return 0; return 0;
fail: fail:
return -ENOMEM; return ret;
} }
void qcow2_refcount_close(BlockDriverState *bs) void qcow2_refcount_close(BlockDriverState *bs)