[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch v2 2/3] correct xc_domain_save()'s return value
On 11/14/2014 10:57 PM, Ian Jackson wrote: > Wen Congyang writes ("[Patch v2 2/3] correct xc_domain_save()'s return > value"): >> If suspend_and_state() fails, the errno may be 0. But we assume >> that the errno is not 0. So remove assert(). > > Thanks for spotting this. > > I think this is going in the wrong direction. Perhaps we could > instead do something like the patch below ? Please let me know what > you think. > > If you think this is a better idea, please submit it as a proper patch > with a proper commit message. OK, I will do it. > > (Ideally we would fix the actual suspend hook in libxl, to always set > errno, but that's too invasive a set of changes to do now, I think.) libxl and helper program are two programs, and we should update the interface between libxl and the hepler program first. We can do it later. Thanks Wen Congyang > > Thanks, > Ian. > > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > > diff --git a/tools/libxc/include/xenguest.h b/tools/libxc/include/xenguest.h > index 40bbac8..3ab9dd8 100644 > --- a/tools/libxc/include/xenguest.h > +++ b/tools/libxc/include/xenguest.h > @@ -35,7 +35,9 @@ > /* callbacks provided by xc_domain_save */ > struct save_callbacks { > /* Called after expiration of checkpoint interval, > - * to suspend the guest. > + * to suspend the guest. Returns 1 for success, or 0 for failure. > + * On failure it should ideally set errno. (If it leaves errno > + * as 0, EIO will be used instead.) > */ > int (*suspend)(void* data); > > diff --git a/tools/libxc/xc_domain_save.c b/tools/libxc/xc_domain_save.c > index 254fdb3..444aac6 100644 > --- a/tools/libxc/xc_domain_save.c > +++ b/tools/libxc/xc_domain_save.c > @@ -361,9 +361,15 @@ static int suspend_and_state(int (*suspend)(void*), > void* data, > xc_interface *xch, int io_fd, int dom, > xc_dominfo_t *info) > { > + errno = 0; > if ( !(*suspend)(data) ) > { > - ERROR("Suspend request failed"); > + if (!errno) { > + errno = EIO; > + ERROR("Suspend request failed (without errno, using EINVAL)"); > + } else { > + ERROR("Suspend request failed"); > + } > return -1; > } > > . > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |