qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4 21/31] virtio-9p: Fix error_append_hint/error_prepend usag


From: Greg Kurz
Subject: Re: [PATCH v4 21/31] virtio-9p: Fix error_append_hint/error_prepend usage
Date: Wed, 2 Oct 2019 11:19:12 +0200

On Tue,  1 Oct 2019 18:53:09 +0300
Vladimir Sementsov-Ogievskiy <address@hidden> wrote:

> If we want to add some info to errp (by error_prepend() or
> error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro.
> Otherwise, this info will not be added when errp == &fatal_err
> (the program will exit prior to the error_append_hint() or
> error_prepend() call).  Fix such cases.
> 

Well... this patch doesn't really fix anything because...

> This commit (together with its neighbors) was generated by
> 
> git grep -l 'error_\(append_hint\|prepend\)(errp' | while read f; do \
> spatch --sp-file scripts/coccinelle/fix-error-add-info.cocci \
> --in-place $f; done
> 
> and then
> 
> ./python/commit-per-subsystem.py MAINTAINERS "$(< auto-msg)"
> 
> (auto-msg was a file with this commit message)
> 
> and then by hand, for not maintained changed files:
> 
> git commit -m "<SUB-SYSTEM>: $(< auto-msg)" <FILES>
> 
> Still, for backporting it may be more comfortable to use only the first
> command and then do one huge commit.
> 
> Reported-by: Greg Kurz <address@hidden>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
> ---
>  hw/9pfs/9p-local.c | 1 +
>  hw/9pfs/9p-proxy.c | 1 +
>  hw/9pfs/9p.c       | 1 +
>  3 files changed, 3 insertions(+)
> 
> diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
> index 08e673a79c..fccbf758bd 100644
> --- a/hw/9pfs/9p-local.c
> +++ b/hw/9pfs/9p-local.c
> @@ -1471,6 +1471,7 @@ static void local_cleanup(FsContext *ctx)
>  
>  static void error_append_security_model_hint(Error **errp)
>  {
> +    ERRP_AUTO_PROPAGATE();
>      error_append_hint(errp, "Valid options are: security_model="
>                        "[passthrough|mapped-xattr|mapped-file|none]\n");
>  }

This function doesn't need auto propagation in the first place. It is
simply a wrapper around error_append_hint(). ERRP_AUTO_PROPAGATE()
should go to the caller local_parse_opts().

Also some extra care is needed there to handle part [3.] of the
cleanup. I understand this is out of the scope of that series,
but I'd rather see all of this fixed in the same patch.

> diff --git a/hw/9pfs/9p-proxy.c b/hw/9pfs/9p-proxy.c
> index 57a8c1c808..9291c8efa2 100644
> --- a/hw/9pfs/9p-proxy.c
> +++ b/hw/9pfs/9p-proxy.c
> @@ -1116,6 +1116,7 @@ static int connect_namedsocket(const char *path, Error 
> **errp)
>  
>  static void error_append_socket_sockfd_hint(Error **errp)
>  {
> +    ERRP_AUTO_PROPAGATE();
>      error_append_hint(errp, "Either specify socket=/some/path where 
> /some/path"
>                        " points to a listening AF_UNIX socket or sock_fd=fd"
>                        " where fd is a file descriptor to a connected AF_UNIX"

Same here. ERRP_AUTO_PROPAGATE() should go to proxy_parse_opts().

> diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
> index cce2366219..1df2749e03 100644
> --- a/hw/9pfs/9p.c
> +++ b/hw/9pfs/9p.c
> @@ -3552,6 +3552,7 @@ void pdu_submit(V9fsPDU *pdu, P9MsgHeader *hdr)
>  int v9fs_device_realize_common(V9fsState *s, const V9fsTransport *t,
>                                 Error **errp)
>  {
> +    ERRP_AUTO_PROPAGATE();

This is correct since this function calls error_prepend() but I think
errp is never &error_fatal or &error_abort on the realize path. Anyway,
better safe than sorry.

>      int i, len;
>      struct stat stat;
>      FsDriverEntry *fse;

Please drop this patch from your series and I'll do the change once
ERRP_AUTO_PROPAGATE() gets merged.

Great thanks for your time in finding a clever way to deal with error
propagation. :)

Cheers,

--
Greg



reply via email to

[Prev in Thread] Current Thread [Next in Thread]