qcow2: make qcow2_cache_put() a void function
This function never receives an invalid table pointer, so we can make it void and remove all the error checking code. Signed-off-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
812e4082ca
commit
a3f1afb43a
|
@ -330,14 +330,10 @@ int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
|
||||||
return qcow2_cache_do_get(bs, c, offset, table, false);
|
return qcow2_cache_do_get(bs, c, offset, table, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
int qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table)
|
void qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table)
|
||||||
{
|
{
|
||||||
int i = qcow2_cache_get_table_idx(bs, c, *table);
|
int i = qcow2_cache_get_table_idx(bs, c, *table);
|
||||||
|
|
||||||
if (c->entries[i].offset == 0) {
|
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->entries[i].ref--;
|
c->entries[i].ref--;
|
||||||
*table = NULL;
|
*table = NULL;
|
||||||
|
|
||||||
|
@ -346,7 +342,6 @@ int qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table)
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(c->entries[i].ref >= 0);
|
assert(c->entries[i].ref >= 0);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void qcow2_cache_entry_mark_dirty(BlockDriverState *bs, Qcow2Cache *c,
|
void qcow2_cache_entry_mark_dirty(BlockDriverState *bs, Qcow2Cache *c,
|
||||||
|
|
|
@ -253,10 +253,7 @@ static int l2_allocate(BlockDriverState *bs, int l1_index, uint64_t **table)
|
||||||
|
|
||||||
memcpy(l2_table, old_table, s->cluster_size);
|
memcpy(l2_table, old_table, s->cluster_size);
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &old_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &old_table);
|
||||||
if (ret < 0) {
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write the l2 table to the file */
|
/* write the l2 table to the file */
|
||||||
|
@ -694,10 +691,7 @@ uint64_t qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs,
|
||||||
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE_COMPRESSED);
|
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE_COMPRESSED);
|
||||||
qcow2_cache_entry_mark_dirty(bs, s->l2_table_cache, l2_table);
|
qcow2_cache_entry_mark_dirty(bs, s->l2_table_cache, l2_table);
|
||||||
l2_table[l2_index] = cpu_to_be64(cluster_offset);
|
l2_table[l2_index] = cpu_to_be64(cluster_offset);
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (ret < 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return cluster_offset;
|
return cluster_offset;
|
||||||
}
|
}
|
||||||
|
@ -789,10 +783,7 @@ int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (ret < 0) {
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this was a COW, we need to decrease the refcount of the old cluster.
|
* If this was a COW, we need to decrease the refcount of the old cluster.
|
||||||
|
@ -944,7 +935,7 @@ static int handle_copied(BlockDriverState *bs, uint64_t guest_offset,
|
||||||
uint64_t *l2_table;
|
uint64_t *l2_table;
|
||||||
unsigned int nb_clusters;
|
unsigned int nb_clusters;
|
||||||
unsigned int keep_clusters;
|
unsigned int keep_clusters;
|
||||||
int ret, pret;
|
int ret;
|
||||||
|
|
||||||
trace_qcow2_handle_copied(qemu_coroutine_self(), guest_offset, *host_offset,
|
trace_qcow2_handle_copied(qemu_coroutine_self(), guest_offset, *host_offset,
|
||||||
*bytes);
|
*bytes);
|
||||||
|
@ -1011,10 +1002,7 @@ static int handle_copied(BlockDriverState *bs, uint64_t guest_offset,
|
||||||
|
|
||||||
/* Cleanup */
|
/* Cleanup */
|
||||||
out:
|
out:
|
||||||
pret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (pret < 0) {
|
|
||||||
return pret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Only return a host offset if we actually made progress. Otherwise we
|
/* Only return a host offset if we actually made progress. Otherwise we
|
||||||
* would make requirements for handle_alloc() that it can't fulfill */
|
* would make requirements for handle_alloc() that it can't fulfill */
|
||||||
|
@ -1139,10 +1127,7 @@ static int handle_alloc(BlockDriverState *bs, uint64_t guest_offset,
|
||||||
* wrong with our code. */
|
* wrong with our code. */
|
||||||
assert(nb_clusters > 0);
|
assert(nb_clusters > 0);
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (ret < 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate, if necessary at a given offset in the image file */
|
/* Allocate, if necessary at a given offset in the image file */
|
||||||
alloc_cluster_offset = start_of_cluster(s, *host_offset);
|
alloc_cluster_offset = start_of_cluster(s, *host_offset);
|
||||||
|
@ -1481,10 +1466,7 @@ static int discard_single_l2(BlockDriverState *bs, uint64_t offset,
|
||||||
qcow2_free_any_clusters(bs, old_l2_entry, 1, type);
|
qcow2_free_any_clusters(bs, old_l2_entry, 1, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (ret < 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nb_clusters;
|
return nb_clusters;
|
||||||
}
|
}
|
||||||
|
@ -1567,10 +1549,7 @@ static int zero_single_l2(BlockDriverState *bs, uint64_t offset,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (ret < 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nb_clusters;
|
return nb_clusters;
|
||||||
}
|
}
|
||||||
|
@ -1763,11 +1742,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
|
||||||
qcow2_cache_entry_mark_dirty(bs, s->l2_table_cache, l2_table);
|
qcow2_cache_entry_mark_dirty(bs, s->l2_table_cache, l2_table);
|
||||||
qcow2_cache_depends_on_flush(s->l2_table_cache);
|
qcow2_cache_depends_on_flush(s->l2_table_cache);
|
||||||
}
|
}
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void **)&l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (ret < 0) {
|
|
||||||
l2_table = NULL;
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (l2_dirty) {
|
if (l2_dirty) {
|
||||||
ret = qcow2_pre_write_overlap_check(bs,
|
ret = qcow2_pre_write_overlap_check(bs,
|
||||||
|
@ -1798,12 +1773,7 @@ fail:
|
||||||
if (!is_active_l1) {
|
if (!is_active_l1) {
|
||||||
qemu_vfree(l2_table);
|
qemu_vfree(l2_table);
|
||||||
} else {
|
} else {
|
||||||
if (ret < 0) {
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
qcow2_cache_put(bs, s->l2_table_cache, (void **)&l2_table);
|
|
||||||
} else {
|
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache,
|
|
||||||
(void **)&l2_table);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -265,10 +265,7 @@ int qcow2_get_refcount(BlockDriverState *bs, int64_t cluster_index,
|
||||||
block_index = cluster_index & (s->refcount_block_size - 1);
|
block_index = cluster_index & (s->refcount_block_size - 1);
|
||||||
*refcount = s->get_refcount(refcount_block, block_index);
|
*refcount = s->get_refcount(refcount_block, block_index);
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
|
qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
|
||||||
if (ret < 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -448,10 +445,7 @@ static int alloc_refcount_block(BlockDriverState *bs,
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->refcount_block_cache, refcount_block);
|
qcow2_cache_put(bs, s->refcount_block_cache, refcount_block);
|
||||||
if (ret < 0) {
|
|
||||||
goto fail_block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we come here, we need to grow the refcount table. Again, a new
|
* If we come here, we need to grow the refcount table. Again, a new
|
||||||
|
@ -723,13 +717,8 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,
|
||||||
/* Load the refcount block and allocate it if needed */
|
/* Load the refcount block and allocate it if needed */
|
||||||
if (table_index != old_table_index) {
|
if (table_index != old_table_index) {
|
||||||
if (refcount_block) {
|
if (refcount_block) {
|
||||||
ret = qcow2_cache_put(bs, s->refcount_block_cache,
|
qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
|
||||||
&refcount_block);
|
|
||||||
if (ret < 0) {
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = alloc_refcount_block(bs, cluster_index, &refcount_block);
|
ret = alloc_refcount_block(bs, cluster_index, &refcount_block);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -774,11 +763,7 @@ fail:
|
||||||
|
|
||||||
/* Write last changed block to disk */
|
/* Write last changed block to disk */
|
||||||
if (refcount_block) {
|
if (refcount_block) {
|
||||||
int wret;
|
qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
|
||||||
wret = qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
|
|
||||||
if (wret < 0) {
|
|
||||||
return ret < 0 ? ret : wret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1188,11 +1173,7 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
|
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
|
||||||
if (ret < 0) {
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (addend != 0) {
|
if (addend != 0) {
|
||||||
ret = qcow2_update_cluster_refcount(bs, l2_offset >>
|
ret = qcow2_update_cluster_refcount(bs, l2_offset >>
|
||||||
|
|
|
@ -587,6 +587,6 @@ int qcow2_cache_get(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
|
||||||
void **table);
|
void **table);
|
||||||
int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
|
int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
|
||||||
void **table);
|
void **table);
|
||||||
int qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table);
|
void qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue