Skip to content

Commit

Permalink
qcow2: make qcow2_cache_put() a void function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
bertogg authored and kevmw committed May 22, 2015
1 parent 812e408 commit a3f1afb
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 71 deletions.
7 changes: 1 addition & 6 deletions block/qcow2-cache.c
Expand Up @@ -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);
}

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);

if (c->entries[i].offset == 0) {
return -ENOENT;
}

c->entries[i].ref--;
*table = NULL;

Expand All @@ -346,7 +342,6 @@ int qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table)
}

assert(c->entries[i].ref >= 0);
return 0;
}

void qcow2_cache_entry_mark_dirty(BlockDriverState *bs, Qcow2Cache *c,
Expand Down
50 changes: 10 additions & 40 deletions block/qcow2-cluster.c
Expand Up @@ -253,10 +253,7 @@ static int l2_allocate(BlockDriverState *bs, int l1_index, uint64_t **table)

memcpy(l2_table, old_table, s->cluster_size);

ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &old_table);
if (ret < 0) {
goto fail;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &old_table);
}

/* write the l2 table to the file */
Expand Down Expand Up @@ -694,10 +691,7 @@ uint64_t qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs,
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE_COMPRESSED);
qcow2_cache_entry_mark_dirty(bs, s->l2_table_cache, l2_table);
l2_table[l2_index] = cpu_to_be64(cluster_offset);
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
if (ret < 0) {
return 0;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);

return cluster_offset;
}
Expand Down Expand Up @@ -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);
if (ret < 0) {
goto err;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);

/*
* If this was a COW, we need to decrease the refcount of the old cluster.
Expand Down Expand Up @@ -944,7 +935,7 @@ static int handle_copied(BlockDriverState *bs, uint64_t guest_offset,
uint64_t *l2_table;
unsigned int nb_clusters;
unsigned int keep_clusters;
int ret, pret;
int ret;

trace_qcow2_handle_copied(qemu_coroutine_self(), guest_offset, *host_offset,
*bytes);
Expand Down Expand Up @@ -1011,10 +1002,7 @@ static int handle_copied(BlockDriverState *bs, uint64_t guest_offset,

/* Cleanup */
out:
pret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
if (pret < 0) {
return pret;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);

/* Only return a host offset if we actually made progress. Otherwise we
* would make requirements for handle_alloc() that it can't fulfill */
Expand Down Expand Up @@ -1139,10 +1127,7 @@ static int handle_alloc(BlockDriverState *bs, uint64_t guest_offset,
* wrong with our code. */
assert(nb_clusters > 0);

ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
if (ret < 0) {
return ret;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);

/* Allocate, if necessary at a given offset in the image file */
alloc_cluster_offset = start_of_cluster(s, *host_offset);
Expand Down Expand Up @@ -1481,10 +1466,7 @@ static int discard_single_l2(BlockDriverState *bs, uint64_t offset,
qcow2_free_any_clusters(bs, old_l2_entry, 1, type);
}

ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
if (ret < 0) {
return ret;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);

return nb_clusters;
}
Expand Down Expand Up @@ -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);
if (ret < 0) {
return ret;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);

return nb_clusters;
}
Expand Down Expand Up @@ -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_depends_on_flush(s->l2_table_cache);
}
ret = qcow2_cache_put(bs, s->l2_table_cache, (void **)&l2_table);
if (ret < 0) {
l2_table = NULL;
goto fail;
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
} else {
if (l2_dirty) {
ret = qcow2_pre_write_overlap_check(bs,
Expand Down Expand Up @@ -1798,12 +1773,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
if (!is_active_l1) {
qemu_vfree(l2_table);
} else {
if (ret < 0) {
qcow2_cache_put(bs, s->l2_table_cache, (void **)&l2_table);
} else {
ret = qcow2_cache_put(bs, s->l2_table_cache,
(void **)&l2_table);
}
qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);
}
}
return ret;
Expand Down
29 changes: 5 additions & 24 deletions block/qcow2-refcount.c
Expand Up @@ -265,10 +265,7 @@ int qcow2_get_refcount(BlockDriverState *bs, int64_t cluster_index,
block_index = cluster_index & (s->refcount_block_size - 1);
*refcount = s->get_refcount(refcount_block, block_index);

ret = qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
if (ret < 0) {
return ret;
}
qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);

return 0;
}
Expand Down Expand Up @@ -448,10 +445,7 @@ static int alloc_refcount_block(BlockDriverState *bs,
return -EAGAIN;
}

ret = qcow2_cache_put(bs, s->refcount_block_cache, refcount_block);
if (ret < 0) {
goto fail_block;
}
qcow2_cache_put(bs, s->refcount_block_cache, refcount_block);

/*
* If we come here, we need to grow the refcount table. Again, a new
Expand Down Expand Up @@ -723,13 +717,8 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,
/* Load the refcount block and allocate it if needed */
if (table_index != old_table_index) {
if (refcount_block) {
ret = qcow2_cache_put(bs, s->refcount_block_cache,
&refcount_block);
if (ret < 0) {
goto fail;
}
qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
}

ret = alloc_refcount_block(bs, cluster_index, &refcount_block);
if (ret < 0) {
goto fail;
Expand Down Expand Up @@ -774,11 +763,7 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,

/* Write last changed block to disk */
if (refcount_block) {
int wret;
wret = qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
if (wret < 0) {
return ret < 0 ? ret : wret;
}
qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);
}

/*
Expand Down Expand Up @@ -1188,11 +1173,7 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
}
}

ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
if (ret < 0) {
goto fail;
}

qcow2_cache_put(bs, s->l2_table_cache, (void **) &l2_table);

if (addend != 0) {
ret = qcow2_update_cluster_refcount(bs, l2_offset >>
Expand Down
2 changes: 1 addition & 1 deletion block/qcow2.h
Expand Up @@ -587,6 +587,6 @@ int qcow2_cache_get(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
void **table);
int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
void **table);
int qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table);
void qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table);

#endif

0 comments on commit a3f1afb

Please sign in to comment.