[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 12/13] libxl: call hotplug scripts for disk devices from libxl
Roger Pau Monne writes ("[PATCH 12/13] libxl: call hotplug scripts for disk devices from libxl"): > Since most of the needed work is already done in previous patches, > this patch only contains the necessary code to call hotplug scripts > for disk devices, that should be called when the device is added or > removed from a guest. > > We will chain the launch of the disk hotplug scripts after the > device_backend_callback callback, or directly from > libxl__initiate_device_{add,remove} if the device is already in the > desired state. > > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxx> > --- > tools/hotplug/Linux/xen-backend.rules | 6 +- > tools/hotplug/Linux/xen-hotplug-common.sh | 6 ++ > tools/libxl/Makefile | 3 +- > tools/libxl/libxl_device.c | 23 ++++- > tools/libxl/libxl_hotplug.c | 84 +++++++++++++++++++ > tools/libxl/libxl_internal.h | 17 ++++ > tools/libxl/libxl_linux.c | 126 > +++++++++++++++++++++++++++++ > 7 files changed, 256 insertions(+), 9 deletions(-) > create mode 100644 tools/libxl/libxl_hotplug.c > > diff --git a/tools/hotplug/Linux/xen-backend.rules > b/tools/hotplug/Linux/xen-backend.rules > index 405387f..d55ff11 100644 > --- a/tools/hotplug/Linux/xen-backend.rules > +++ b/tools/hotplug/Linux/xen-backend.rules > @@ -1,11 +1,11 @@ > -SUBSYSTEM=="xen-backend", KERNEL=="tap*", RUN+="/etc/xen/scripts/blktap > $env{ACTION}" > -SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block > $env{ACTION}" > +SUBSYSTEM=="xen-backend", KERNEL=="tap*", ENV{UDEV_CALL}="1", > RUN+="/etc/xen/scripts/blktap $env{ACTION}" > +SUBSYSTEM=="xen-backend", KERNEL=="vbd*", ENV{UDEV_CALL}="1", > RUN+="/etc/xen/scripts/block $env{ACTION}" > SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm > $env{ACTION}" > SUBSYSTEM=="xen-backend", KERNEL=="vif2-*", RUN+="/etc/xen/scripts/vif2 > $env{ACTION}" > SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="online", > RUN+="/etc/xen/scripts/vif-setup online type_if=vif" > SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="offline", > RUN+="/etc/xen/scripts/vif-setup offline type_if=vif" > SUBSYSTEM=="xen-backend", KERNEL=="vscsi*", RUN+="/etc/xen/scripts/vscsi > $env{ACTION}" > -SUBSYSTEM=="xen-backend", ACTION=="remove", > RUN+="/etc/xen/scripts/xen-hotplug-cleanup" > +SUBSYSTEM=="xen-backend", ACTION=="remove", ENV{UDEV_CALL}="1", > RUN+="/etc/xen/scripts/xen-hotplug-cleanup" > KERNEL=="evtchn", NAME="xen/%k" > SUBSYSTEM=="xen", KERNEL=="blktap[0-9]*", NAME="xen/%k", MODE="0600" > SUBSYSTEM=="blktap2", KERNEL=="blktap[0-9]*", NAME="xen/blktap-2/%k", > MODE="0600" > diff --git a/tools/hotplug/Linux/xen-hotplug-common.sh > b/tools/hotplug/Linux/xen-hotplug-common.sh > index 8f6557d..4a7bc73 100644 > --- a/tools/hotplug/Linux/xen-hotplug-common.sh > +++ b/tools/hotplug/Linux/xen-hotplug-common.sh > @@ -15,6 +15,12 @@ > # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > # > > +# Hack to prevent the execution of hotplug scripts from udev if the domain > +# has been launched from libxl > +if [ -n "${UDEV_CALL}" ] && \ > + xenstore-read "libxl/disable_udev" >/dev/null 2>&1; then > + exit 0 > +fi > > dir=$(dirname "$0") > . "$dir/hotplugpath.sh" > diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile > index 5d9227e..9abadff 100644 > --- a/tools/libxl/Makefile > +++ b/tools/libxl/Makefile > @@ -66,7 +66,8 @@ LIBXL_OBJS = flexarray.o libxl.o libxl_create.o libxl_dm.o > libxl_pci.o \ > libxl_dom.o libxl_exec.o libxl_xshelp.o > libxl_device.o \ > libxl_internal.o libxl_utils.o libxl_uuid.o \ > libxl_json.o libxl_aoutils.o \ > - libxl_qmp.o libxl_event.o libxl_fork.o $(LIBXL_OBJS-y) > + libxl_qmp.o libxl_event.o libxl_fork.o > libxl_hotplug.o \ > + $(LIBXL_OBJS-y) > LIBXL_OBJS += _libxl_types.o libxl_flask.o _libxl_types_internal.o > > $(LIBXL_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) > $(CFLAGS_libxenstore) $(CFLAGS_libblktapctl) -include > $(XEN_ROOT)/tools/config.h > diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c > index 6b0ce95..0b7beb7 100644 > --- a/tools/libxl/libxl_device.c > +++ b/tools/libxl/libxl_device.c > @@ -393,6 +398,11 @@ void libxl__device_disk_add(libxl__egc *egc, uint32_t > dom> @@ -760,7 +770,7 @@ out_fail: > > out_ok: > assert(!rc); > - aorm->callback(egc, aorm); > + libxl__device_hotplug(egc, aorm); Where does the name "aorm" come from here ? It doesn't seem to involve removal. > +int libxl__hotplug_launch(libxl__gc *gc, libxl__ao_device *aorm, Ie shouldn't that be "aodev" or something ? > +/* Hotplug scripts helpers */ > + > +static void cleanup(libxl__gc *gc, libxl__ao_device *aorm) > +{ > + if (!aorm) return; > + libxl__ev_time_deregister(gc, &aorm->ev); > +} > + > +static void callback(libxl__egc *egc, libxl__ev_child *child, > + pid_t pid, int status) > +{ > + libxl__ao_device *aorm = CONTAINER_OF(child, *aorm, child); > + STATE_AO_GC(aorm->ao); > + > + cleanup(gc, aorm); > + > + if (status) { > + libxl_report_child_exitstatus(CTX, aorm->rc ? LIBXL__LOG_ERROR > + : LIBXL__LOG_WARNING, > + aorm->what, pid, status); > + aorm->rc = ERROR_FAIL; > + } > + aorm->callback(egc, aorm); > +} This structure where half of the event handling is in the common code and half of it is in libxl_linux.c is not really appropriate. It means that the hotplug event machinery is not all in the same place. Can you make an interface to libxl_linux.c which is fully synchronous, so that libxl_linux.c simply says whether to run the script or not ? Eg libxl__get_hotplug_script_info(libxl__egc *, libxl__device *dev, char ***args, char ***env); Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |