diff mbox

[v2] block/sheepdog: add error handling to sd_snapshot_delete()

Message ID 1458621192-6928-1-git-send-email-menjo.takashi@lab.ntt.co.jp
State New
Headers show

Commit Message

Takashi Menjo March 22, 2016, 4:33 a.m. UTC
Errors have been ignored or not propagated in some code paths
in sd_snapshot_delete(). This patch adds error handling.

Cc: Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>
Cc: Jeff Cody <jcody@redhat.com>
Cc: Vasiliy Tolstov <v.tolstov@selfip.ru>
Cc: sheepdog@lists.wpkg.org

Signed-off-by: Takashi Menjo <menjo.takashi@lab.ntt.co.jp>
---
 block/sheepdog.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Hitoshi Mitake March 22, 2016, 4:51 a.m. UTC | #1
On Tue, Mar 22, 2016 at 1:33 PM, Takashi Menjo <menjo.takashi@lab.ntt.co.jp>
wrote:

> Errors have been ignored or not propagated in some code paths
> in sd_snapshot_delete(). This patch adds error handling.
>
> Cc: Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>
> Cc: Jeff Cody <jcody@redhat.com>
> Cc: Vasiliy Tolstov <v.tolstov@selfip.ru>
> Cc: sheepdog@lists.wpkg.org
>
> Signed-off-by: Takashi Menjo <menjo.takashi@lab.ntt.co.jp>
> ---
>  block/sheepdog.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>

Looks good to me.
Reviewed-by: Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>

Vasiliy, could you test it on your environment if you have a time?

Thanks,
Hitoshi


>
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index a3aeae4..39d13d2 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -2565,6 +2565,7 @@ static int sd_snapshot_delete(BlockDriverState *bs,
>      SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr;
>
>      if (!remove_objects(s)) {
> +        error_setg(errp, "failed to discard snapshot inode");
>          return -1;
>      }
>
> @@ -2588,12 +2589,13 @@ static int sd_snapshot_delete(BlockDriverState *bs,
>      ret = find_vdi_name(s, s->name, snap_id, snap_tag, &vid, true,
>                          &local_err);
>      if (ret) {
> +        error_propagate(errp, local_err);
>          return ret;
>      }
>
>      fd = connect_to_sdog(s, &local_err);
>      if (fd < 0) {
> -        error_report_err(local_err);
> +        error_propagate(errp, local_err);
>          return -1;
>      }
>
> @@ -2601,16 +2603,17 @@ static int sd_snapshot_delete(BlockDriverState *bs,
>                   buf, &wlen, &rlen);
>      closesocket(fd);
>      if (ret) {
> +        error_setg_errno(errp, -ret, "failed to delete %s", s->name);
>          return ret;
>      }
>
>      switch (rsp->result) {
>      case SD_RES_NO_VDI:
> -        error_report("%s was already deleted", s->name);
> +        error_setg(errp, "%s was already deleted", s->name);
>      case SD_RES_SUCCESS:
>          break;
>      default:
> -        error_report("%s, %s", sd_strerror(rsp->result), s->name);
> +        error_setg(errp, "%s, %s", sd_strerror(rsp->result), s->name);
>          return -1;
>      }
>
> --
> 2.7.4.windows.1
>
>
>
> --
> sheepdog mailing list
> sheepdog@lists.wpkg.org
> https://lists.wpkg.org/mailman/listinfo/sheepdog
>
diff mbox

Patch

diff --git a/block/sheepdog.c b/block/sheepdog.c
index a3aeae4..39d13d2 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -2565,6 +2565,7 @@  static int sd_snapshot_delete(BlockDriverState *bs,
     SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr;
 
     if (!remove_objects(s)) {
+        error_setg(errp, "failed to discard snapshot inode");
         return -1;
     }
 
@@ -2588,12 +2589,13 @@  static int sd_snapshot_delete(BlockDriverState *bs,
     ret = find_vdi_name(s, s->name, snap_id, snap_tag, &vid, true,
                         &local_err);
     if (ret) {
+        error_propagate(errp, local_err);
         return ret;
     }
 
     fd = connect_to_sdog(s, &local_err);
     if (fd < 0) {
-        error_report_err(local_err);
+        error_propagate(errp, local_err);
         return -1;
     }
 
@@ -2601,16 +2603,17 @@  static int sd_snapshot_delete(BlockDriverState *bs,
                  buf, &wlen, &rlen);
     closesocket(fd);
     if (ret) {
+        error_setg_errno(errp, -ret, "failed to delete %s", s->name);
         return ret;
     }
 
     switch (rsp->result) {
     case SD_RES_NO_VDI:
-        error_report("%s was already deleted", s->name);
+        error_setg(errp, "%s was already deleted", s->name);
     case SD_RES_SUCCESS:
         break;
     default:
-        error_report("%s, %s", sd_strerror(rsp->result), s->name);
+        error_setg(errp, "%s, %s", sd_strerror(rsp->result), s->name);
         return -1;
     }