From: Max Reitz <mreitz@redhat.com>
To: Wenchao Xia <xiawenc@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, pbonzini@redhat.com, stefanha@gmail.com
Subject: Re: [Qemu-devel] [PATCH V4 2/6] qcow2: add error message in qcow2_write_snapshots()
Date: Sat, 02 Nov 2013 13:52:05 +0100 [thread overview]
Message-ID: <5274F575.6020106@redhat.com> (raw)
In-Reply-To: <1381787553-12497-3-git-send-email-xiawenc@linux.vnet.ibm.com>
On 14.10.2013 23:52, Wenchao Xia wrote:
> The function still returns int since qcow2_snapshot_delete() will
> return the number.
>
> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
> ---
> block/qcow2-snapshot.c | 48 ++++++++++++++++++++++++++++++++++++++++++------
> 1 files changed, 42 insertions(+), 6 deletions(-)
>
> diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
> index b373f9a..4bd494b 100644
> --- a/block/qcow2-snapshot.c
> +++ b/block/qcow2-snapshot.c
> @@ -152,7 +152,7 @@ fail:
> }
>
> /* add at the end of the file a new list of snapshots */
> -static int qcow2_write_snapshots(BlockDriverState *bs)
> +static int qcow2_write_snapshots(BlockDriverState *bs, Error **errp)
> {
> BDRVQcowState *s = bs->opaque;
> QCowSnapshot *sn;
> @@ -183,10 +183,18 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
> offset = snapshots_offset;
> if (offset < 0) {
> ret = offset;
> + error_setg(errp,
> + "Failed in allocation of cluster for snapshot list: "
> + "%d (%s)",
> + ret, strerror(-ret));
Again, error_setg_errno() is your friend.
> goto fail;
> }
> ret = bdrv_flush(bs);
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in flush after snapshot list cluster allocation: "
> + "%d (%s)",
> + ret, strerror(-ret));
> goto fail;
> }
>
> @@ -194,6 +202,10 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
> * must indeed be completely free */
> ret = qcow2_pre_write_overlap_check(bs, 0, offset, snapshots_size);
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in overlap check for snapshot list cluster at %"
> + PRIi64 " with size %d: %d (%s)",
> + offset, snapshots_size, ret, strerror(-ret));
> goto fail;
> }
>
> @@ -227,24 +239,40 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
>
> ret = bdrv_pwrite(bs->file, offset, &h, sizeof(h));
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in write of snapshot header at %"
> + PRIi64 " with size %" PRIu64 ": %d (%s)",
> + offset, sizeof(h), ret, strerror(-ret));
Again, on 32 bit systems, sizeof(size_t) is generally 4 and not 8 (you
may want to cast sizeof(h) to int and just use %d).
> goto fail;
> }
> offset += sizeof(h);
>
> ret = bdrv_pwrite(bs->file, offset, &extra, sizeof(extra));
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in write of extra snapshot data at %"
> + PRIi64 " with size %" PRIu64 ": %d (%s)",
> + offset, sizeof(extra), ret, strerror(-ret));
Same here.
> goto fail;
> }
> offset += sizeof(extra);
>
> ret = bdrv_pwrite(bs->file, offset, sn->id_str, id_str_size);
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in write of snapshot id string at %"
> + PRIi64 " with size %d: %d (%s)",
> + offset, id_str_size, ret, strerror(-ret));
> goto fail;
> }
> offset += id_str_size;
>
> ret = bdrv_pwrite(bs->file, offset, sn->name, name_size);
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in write of snapshot name string at %"
> + PRIi64 " with size %d: %d (%s)",
> + offset, name_size, ret, strerror(-ret));
> goto fail;
> }
> offset += name_size;
> @@ -256,6 +284,9 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
> */
> ret = bdrv_flush(bs);
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in flush after snapshot list update: %d (%s)",
> + ret, strerror(-ret));
> goto fail;
> }
>
> @@ -268,6 +299,11 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
> ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots),
> &header_data, sizeof(header_data));
> if (ret < 0) {
> + error_setg(errp,
> + "Failed in update of image header at %"
> + PRIi64 " with size %" PRIu64 ":%d (%s)",
> + offsetof(QCowHeader, nb_snapshots), sizeof(header_data),
> + ret, strerror(-ret));
And here (also applies to offsetof(), which returns size_t as well).
Also, you forgot a space after the colon (although you should be using
error_setg_errno() anyway).
Max
> goto fail;
> }
>
> @@ -283,6 +319,9 @@ fail:
> qcow2_free_clusters(bs, snapshots_offset, snapshots_size,
> QCOW2_DISCARD_ALWAYS);
> }
> + if (errp) {
> + g_assert(error_is_set(errp));
> + }
> return ret;
> }
>
> @@ -446,10 +485,8 @@ void qcow2_snapshot_create(BlockDriverState *bs,
> s->snapshots = new_snapshot_list;
> s->snapshots[s->nb_snapshots++] = *sn;
>
> - ret = qcow2_write_snapshots(bs);
> + ret = qcow2_write_snapshots(bs, errp);
> if (ret < 0) {
> - /* Following line will be replaced with more detailed error later */
> - error_setg(errp, "Failed in write of snapshot");
> g_free(s->snapshots);
> s->snapshots = old_snapshot_list;
> s->nb_snapshots--;
> @@ -623,9 +660,8 @@ int qcow2_snapshot_delete(BlockDriverState *bs,
> s->snapshots + snapshot_index + 1,
> (s->nb_snapshots - snapshot_index - 1) * sizeof(sn));
> s->nb_snapshots--;
> - ret = qcow2_write_snapshots(bs);
> + ret = qcow2_write_snapshots(bs, errp);
> if (ret < 0) {
> - error_setg(errp, "Failed to remove snapshot from snapshot list");
> return ret;
> }
>
next prev parent reply other threads:[~2013-11-02 12:52 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-14 21:52 [Qemu-devel] [PATCH V4 0/6] qcow2: rollback the modification on fail in snapshot creation Wenchao Xia
2013-10-14 21:52 ` [Qemu-devel] [PATCH V4 1/6] snapshot: add parameter *errp in snapshot create Wenchao Xia
2013-11-02 12:39 ` Max Reitz
2013-11-04 1:47 ` Wenchao Xia
2013-11-04 21:32 ` Max Reitz
2013-10-14 21:52 ` [Qemu-devel] [PATCH V4 2/6] qcow2: add error message in qcow2_write_snapshots() Wenchao Xia
2013-11-02 12:52 ` Max Reitz [this message]
2013-11-04 1:48 ` Wenchao Xia
2013-11-04 19:46 ` Eric Blake
2013-11-05 2:19 ` Wenchao Xia
2013-10-14 21:52 ` [Qemu-devel] [PATCH V4 3/6] qcow2: do not free clusters when fail in header update in qcow2_write_snapshots Wenchao Xia
2013-11-02 13:04 ` Max Reitz
2013-11-02 13:56 ` Max Reitz
2013-11-04 1:51 ` Wenchao Xia
2013-10-14 21:52 ` [Qemu-devel] [PATCH V4 4/6] qcow2: cancel the modification on fail in qcow2_snapshot_create() Wenchao Xia
2013-11-02 13:11 ` Max Reitz
2013-10-14 21:52 ` [Qemu-devel] [PATCH V4 5/6] blkdebug: add debug events for snapshot Wenchao Xia
2013-11-02 13:20 ` Max Reitz
2013-10-14 21:52 ` [Qemu-devel] [PATCH V4 6/6] qemu-iotests: add test for qcow2 snapshot Wenchao Xia
2013-11-02 13:34 ` Max Reitz
2013-11-01 1:35 ` [Qemu-devel] [PATCH V4 0/6] qcow2: rollback the modification on fail in snapshot creation Wenchao Xia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5274F575.6020106@redhat.com \
--to=mreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=xiawenc@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.