[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 01/10] libxl: change libxl__ao_device_remove to libxl__ao_device
Roger Pau Monne writes ("[PATCH v4 01/10] libxl: change libxl__ao_device_remove to libxl__ao_device"): > Introduce a new structure to track state of device backends, that will > be used in following patches on this series. > > This structure if used for both device creation and device > destruction and removes libxl__ao_device_remove. ... > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > index e3d05c2..7fdecf1 100644 > --- a/tools/libxl/libxl.c > +++ b/tools/libxl/libxl.c ... > +/* Macro for defining device remove/destroy functions in a compact way */ > +#define DEFINE_DEVICE_REMOVE(type, removedestroy, f) \ Looks reasonable to me. > +/* Define all remove/destroy functions and undef the macro */ > + > +/* disk */ > +DEFINE_DEVICE_REMOVE(disk, remove, 0) > +DEFINE_DEVICE_REMOVE(disk, destroy, 1) I'm not sure what purpose the comment serves but I don't really object to it :-). > diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h > index 52f5435..670a17b 100644 > --- a/tools/libxl/libxl_internal.h > +++ b/tools/libxl/libxl_internal.h ... > @@ -830,13 +830,6 @@ _hidden const char *libxl__device_nic_devname(libxl__gc * > +/* This functions sets the necessary libxl__ao_device struct values to use > + * safely inside functions. It marks the operation as "active" > + * since we need to be sure that all device status structs are set > + * to active before start queueing events, or we might call > + * ao_complete before all devices had finished */ > +_hidden void libxl__prepare_ao_device(libxl__ao_device *aodev, libxl__ao *ao, > + libxl__ao_device **base); You need to clearly explain what the constraints are on the order of calling _prepare and _initiate_..._remove. Questions whose answers should be clear from your text include: - is it legal to call _initiate_ without having previously called _prepare ? - is it legal to call _prepare and then simply throw away the aodev ? - is it legal to call _prepare multiple times ? (If the answer to the previous question is `yes' then it must be, I think.) > @@ -436,34 +441,35 @@ out: > -int libxl__initiate_device_remove(libxl__egc *egc, libxl__ao *ao, > - libxl__device *dev) > +void libxl__initiate_device_remove(libxl__egc *egc, > + libxl__ao_device *aodev) > { ... > +retry_transaction: > + t = xs_transaction_start(ctx->xsh); > + if (aodev->force) > + libxl__xs_path_cleanup(gc, t, > + libxl__device_frontend_path(gc, aodev->dev)); > + state = libxl__xs_read(gc, t, state_path); Didn't I previously comment adversely on having this check here ? Ah yes, I commented on the corresponding code in add (v2 08/15): [...], I think all of this is done for you by libxl__ev_devstate_wait. You don't need to pre-check the state path at all. And: Do you really need to do the xenstore state read here ? Surely libxl__ev_devstate_wait will do it for you. > + /* Some devices (vkbd) fail to disconnect properly, > + * but we shouldn't alarm the user if it's during > + * domain destruction. > + */ > + if (rc && aodev->action == DEVICE_CONNECT) { > + LOG(ERROR, "unable to connect device with path %s", > + libxl__device_backend_path(gc, aodev->dev)); > + goto out; > + } else if(rc) { Missing space after `if'. > + LOG(DEBUG, "unable to disconnect device with path %s", > + libxl__device_backend_path(gc, aodev->dev)); > + goto out; > + } Last time I wrote: Perhaps we should have a separate flag which controls error reporting so that a user-requested graceful device disconnect gets full error logging ? Did you miss the fact that email suggesting the macro for generating the device remove functions also had these other comments in ? Thanks, Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |