[libvirt] [PATCH] util: correct retry path in virFileOperation
Laine Stump
laine at laine.org
Thu Mar 3 01:17:13 UTC 2011
On 03/02/2011 06:30 PM, Eric Blake wrote:
> In virFileOperation, the parent does a fallback to a non-fork
> attempt if it detects that the child returned EACCES. However,
> the child was calling _exit(-EACCESS), which does _not_ appear
> as EACCES in the parent.
>
> * src/util/util.c (virFileOperation): Correctly pass EACCES from
> child to parent.
> ---
> src/util/util.c | 9 +++++++++
> 1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/src/util/util.c b/src/util/util.c
> index bac71c8..0fe1c41 100644
> --- a/src/util/util.c
> +++ b/src/util/util.c
> @@ -1559,6 +1559,15 @@ parenterror:
> goto childerror;
> }
> childerror:
> + /* Hook sets ret to -errno on failure, but exit must be positive.
> + * If we exit with EACCES, then parent tries again. */
> + /* XXX This makes assumptions about errno being< 255, which is
> + * not true on Hurd. */
> + ret = -ret;
Maybe just a matter of taste, but I think I would prefer if everywhere
in virFileOperation set ret = errno (instead of -errno), and when hook
is called, do "ret = - hook(...)". Then you don't need the extra "ret =
-ret".
ACK either way, though.
> + if ((ret& 0xff) != ret) {
> + VIR_WARN("unable to pass desired return value %d", ret);
> + ret = 0xff;
> + }
> _exit(ret);
>
> }
More information about the libvir-list
mailing list