Commit 360bd074 authored by Kevin Wolf's avatar Kevin Wolf
Browse files

qcow2: Add errp to preallocate_co()



We'll add a bdrv_co_truncate() call in the next patch which can return
an Error that we don't want to discard. So add an errp parameter to
preallocate_co().

Cc: qemu-stable@nongnu.org
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
parent f29fbf7c
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -2721,7 +2721,7 @@ static int qcow2_set_up_encryption(BlockDriverState *bs,
 * Returns: 0 on success, -errno on failure.
 */
static int coroutine_fn preallocate_co(BlockDriverState *bs, uint64_t offset,
                                       uint64_t new_length)
                                       uint64_t new_length, Error **errp)
{
    BDRVQcow2State *s = bs->opaque;
    uint64_t bytes;
@@ -2738,6 +2738,7 @@ static int coroutine_fn preallocate_co(BlockDriverState *bs, uint64_t offset,
        ret = qcow2_alloc_cluster_offset(bs, offset, &cur_bytes,
                                         &host_offset, &meta);
        if (ret < 0) {
            error_setg_errno(errp, -ret, "Allocating clusters failed");
            return ret;
        }

@@ -2746,6 +2747,7 @@ static int coroutine_fn preallocate_co(BlockDriverState *bs, uint64_t offset,

            ret = qcow2_alloc_cluster_link_l2(bs, meta);
            if (ret < 0) {
                error_setg_errno(errp, -ret, "Mapping clusters failed");
                qcow2_free_any_clusters(bs, meta->alloc_offset,
                                        meta->nb_clusters, QCOW2_DISCARD_NEVER);
                return ret;
@@ -2775,6 +2777,7 @@ static int coroutine_fn preallocate_co(BlockDriverState *bs, uint64_t offset,
        ret = bdrv_pwrite(s->data_file, (host_offset + cur_bytes) - 1,
                          &data, 1);
        if (ret < 0) {
            error_setg_errno(errp, -ret, "Writing to EOF failed");
            return ret;
        }
    }
@@ -3748,9 +3751,8 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
        break;

    case PREALLOC_MODE_METADATA:
        ret = preallocate_co(bs, old_length, offset);
        ret = preallocate_co(bs, old_length, offset, errp);
        if (ret < 0) {
            error_setg_errno(errp, -ret, "Preallocation failed");
            goto fail;
        }
        break;
@@ -3766,9 +3768,8 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
        /* With a data file, preallocation means just allocating the metadata
         * and forwarding the truncate request to the data file */
        if (has_data_file(bs)) {
            ret = preallocate_co(bs, old_length, offset);
            ret = preallocate_co(bs, old_length, offset, errp);
            if (ret < 0) {
                error_setg_errno(errp, -ret, "Preallocation failed");
                goto fail;
            }
            break;