All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Richard W.M. Jones" <rjones@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 09/18] block/ssh: Propagate errors to open and create methods
Date: Wed, 14 May 2014 15:58:00 +0100	[thread overview]
Message-ID: <20140514145800.GW1302@redhat.com> (raw)
In-Reply-To: <1399996972-23429-10-git-send-email-armbru@redhat.com>

On Tue, May 13, 2014 at 06:02:43PM +0200, Markus Armbruster wrote:
> Completes the conversion to Error started in commit 015a103^..d5124c0.
> 
> Cc: "Richard W.M. Jones" <rjones@redhat.com>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Richard W.M. Jones <rjones@redhat.com>

>  block/ssh.c | 47 ++++++++++++++++++++++-------------------------
>  1 file changed, 22 insertions(+), 25 deletions(-)
> 
> diff --git a/block/ssh.c b/block/ssh.c
> index 26078c4..b212971 100644
> --- a/block/ssh.c
> +++ b/block/ssh.c
> @@ -131,29 +131,34 @@ session_error_setg(Error **errp, BDRVSSHState *s, const char *fs, ...)
>      g_free(msg);
>  }
>  
> -/* Wrappers around error_report which make sure to dump as much
> - * information from libssh2 as possible.
> - */
> -static void GCC_FMT_ATTR(2, 3)
> -session_error_report(BDRVSSHState *s, const char *fs, ...)
> +static void GCC_FMT_ATTR(3, 4)
> +sftp_error_setg(Error **errp, BDRVSSHState *s, const char *fs, ...)
>  {
>      va_list args;
> +    char *msg;
>  
>      va_start(args, fs);
> -    error_vprintf(fs, args);
> +    msg = g_strdup_vprintf(fs, args);
> +    va_end(args);
>  
> -    if ((s)->session) {
> +    if (s->sftp) {
>          char *ssh_err;
>          int ssh_err_code;
> +        unsigned long sftp_err_code;
>  
>          /* This is not an errno.  See <libssh2.h>. */
>          ssh_err_code = libssh2_session_last_error(s->session,
>                                                    &ssh_err, NULL, 0);
> -        error_printf(": %s (libssh2 error code: %d)", ssh_err, ssh_err_code);
> -    }
> +        /* See <libssh2_sftp.h>. */
> +        sftp_err_code = libssh2_sftp_last_error((s)->sftp);
>  
> -    va_end(args);
> -    error_printf("\n");
> +        error_setg(errp,
> +                   "%s: %s (libssh2 error code: %d, sftp error code: %lu)",
> +                   msg, ssh_err, ssh_err_code, sftp_err_code);
> +    } else {
> +        error_setg(errp, "%s", msg);
> +    }
> +    g_free(msg);
>  }
>  
>  static void GCC_FMT_ATTR(2, 3)
> @@ -594,14 +599,14 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options,
>              path, ssh_flags, creat_mode);
>      s->sftp_handle = libssh2_sftp_open(s->sftp, path, ssh_flags, creat_mode);
>      if (!s->sftp_handle) {
> -        session_error_report(s, "failed to open remote file '%s'", path);
> +        session_error_setg(errp, s, "failed to open remote file '%s'", path);
>          ret = -EINVAL;
>          goto err;
>      }
>  
>      r = libssh2_sftp_fstat(s->sftp_handle, &s->attrs);
>      if (r < 0) {
> -        sftp_error_report(s, "failed to read file attributes");
> +        sftp_error_setg(errp, s, "failed to read file attributes");
>          return -EINVAL;
>      }
>  
> @@ -639,7 +644,6 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options,
>  static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags,
>                           Error **errp)
>  {
> -    Error *local_err = NULL;
>      BDRVSSHState *s = bs->opaque;
>      int ret;
>      int ssh_flags;
> @@ -652,10 +656,8 @@ static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags,
>      }
>  
>      /* Start up SSH. */
> -    ret = connect_to_ssh(s, options, ssh_flags, 0, &local_err);
> +    ret = connect_to_ssh(s, options, ssh_flags, 0, errp);
>      if (ret < 0) {
> -        qerror_report_err(local_err);
> -        error_free(local_err);
>          goto err;
>      }
>  
> @@ -686,7 +688,6 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options,
>                        Error **errp)
>  {
>      int r, ret;
> -    Error *local_err = NULL;
>      int64_t total_size = 0;
>      QDict *uri_options = NULL;
>      BDRVSSHState s;
> @@ -705,10 +706,8 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options,
>      DPRINTF("total_size=%" PRIi64, total_size);
>  
>      uri_options = qdict_new();
> -    r = parse_uri(filename, uri_options, &local_err);
> +    r = parse_uri(filename, uri_options, errp);
>      if (r < 0) {
> -        qerror_report_err(local_err);
> -        error_free(local_err);
>          ret = r;
>          goto out;
>      }
> @@ -716,10 +715,8 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options,
>      r = connect_to_ssh(&s, uri_options,
>                         LIBSSH2_FXF_READ|LIBSSH2_FXF_WRITE|
>                         LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC,
> -                       0644, &local_err);
> +                       0644, errp);
>      if (r < 0) {
> -        qerror_report_err(local_err);
> -        error_free(local_err);
>          ret = r;
>          goto out;
>      }
> @@ -728,7 +725,7 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options,
>          libssh2_sftp_seek64(s.sftp_handle, total_size-1);
>          r2 = libssh2_sftp_write(s.sftp_handle, c, 1);
>          if (r2 < 0) {
> -            sftp_error_report(&s, "truncate failed");
> +            sftp_error_setg(errp, &s, "truncate failed");
>              ret = -EINVAL;
>              goto out;
>          }
> -- 
> 1.8.1.4

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/

  parent reply	other threads:[~2014-05-14 14:58 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-13 16:02 [Qemu-devel] [PATCH 00/18] [PATCH 00/18] block: Purge qerror_report() Markus Armbruster
2014-05-13 16:02 ` [Qemu-devel] [PATCH 01/18] blockdev: Don't use qerror_report_err() in drive_init() Markus Armbruster
2014-05-13 17:04   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 02/18] blockdev: Don't use qerror_report() in do_drive_del() Markus Armbruster
2014-05-13 19:38   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 03/18] qemu-nbd: Don't use qerror_report() Markus Armbruster
2014-05-13 19:39   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 04/18] block/rbd: Propagate errors to open and create methods Markus Armbruster
2014-05-13 19:51   ` Eric Blake
2014-05-14  5:41     ` Markus Armbruster
2014-05-13 16:02 ` [Qemu-devel] [PATCH 05/18] block/ssh: Drop superfluous libssh2_session_last_errno() calls Markus Armbruster
2014-05-14  9:11   ` Richard W.M. Jones
2014-05-14 11:06     ` Markus Armbruster
2014-05-14 12:01       ` Richard W.M. Jones
2014-05-14 14:48         ` Markus Armbruster
2014-05-14 14:57   ` Richard W.M. Jones
2014-05-13 16:02 ` [Qemu-devel] [PATCH 06/18] block/ssh: Propagate errors through check_host_key() Markus Armbruster
2014-05-14 14:57   ` Richard W.M. Jones
2014-05-13 16:02 ` [Qemu-devel] [PATCH 07/18] block/ssh: Propagate errors through authenticate() Markus Armbruster
2014-05-14 14:57   ` Richard W.M. Jones
2014-05-13 16:02 ` [Qemu-devel] [PATCH 08/18] block/ssh: Propagate errors through connect_to_ssh() Markus Armbruster
2014-05-14 14:57   ` Richard W.M. Jones
2014-05-13 16:02 ` [Qemu-devel] [PATCH 09/18] block/ssh: Propagate errors to open and create methods Markus Armbruster
2014-05-14  9:13   ` Richard W.M. Jones
2014-05-14 14:58   ` Richard W.M. Jones [this message]
2014-05-13 16:02 ` [Qemu-devel] [PATCH 10/18] block/vvfat: Propagate errors through enable_write_target() Markus Armbruster
2014-05-14 16:57   ` Eric Blake
2014-05-14 17:36     ` Markus Armbruster
2014-05-13 16:02 ` [Qemu-devel] [PATCH 11/18] block/vvfat: Propagate errors through init_directories() Markus Armbruster
2014-05-14 17:45   ` Eric Blake
2014-05-14 19:48     ` Markus Armbruster
2014-05-13 16:02 ` [Qemu-devel] [PATCH 12/18] block/sheepdog: Propagate errors through connect_to_sdog() Markus Armbruster
2014-05-14 18:19   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 13/18] block/sheepdog: Propagate errors through get_sheep_fd() Markus Armbruster
2014-05-15 18:54   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 14/18] block/sheepdog: Propagate errors through sd_prealloc() Markus Armbruster
2014-05-15 18:59   ` Eric Blake
2014-05-15 19:45     ` Markus Armbruster
2014-05-16  8:54       ` Markus Armbruster
2014-05-13 16:02 ` [Qemu-devel] [PATCH 15/18] block/sheepdog: Propagate errors through do_sd_create() Markus Armbruster
2014-05-15 19:02   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 16/18] block/sheepdog: Propagate errors through find_vdi_name() Markus Armbruster
2014-05-15 19:06   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 17/18] block/sheepdog: Propagate errors to open and create methods Markus Armbruster
2014-05-15 19:07   ` Eric Blake
2014-05-13 16:02 ` [Qemu-devel] [PATCH 18/18] block/sheepdog: Don't use qerror_report() Markus Armbruster
2014-05-15 19:08   ` Eric Blake

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=20140514145800.GW1302@redhat.com \
    --to=rjones@redhat.com \
    --cc=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.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.