All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: Max Reitz <mreitz@redhat.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: Mon, 04 Nov 2013 09:48:44 +0800	[thread overview]
Message-ID: <5276FCFC.3080600@linux.vnet.ibm.com> (raw)
In-Reply-To: <5274F575.6020106@redhat.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).
>

   Maybe caset as (int64_t)sizeof(h) to avoid possible incomplete value?

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

   Will use error_setg_errno().


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

  reply	other threads:[~2013-11-04  1:49 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
2013-11-04  1:48     ` Wenchao Xia [this message]
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=5276FCFC.3080600@linux.vnet.ibm.com \
    --to=xiawenc@linux.vnet.ibm.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.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.