At 03/24/2011 01:36 AM, Daniel P. Berrange Write:
The O_NONBLOCK flag doesn't work as desired on plain files
or block devices. Introduce an I/O helper program that does
the blocking I/O operations, communicating over a pipe that
can support O_NONBLOCK
* src/fdstream.c, src/fdstream.h: Add non-blocking I/O
on plain files/block devices
* src/Makefile.am, src/util/iohelper.c: I/O helper program
* src/qemu/qemu_driver.c, src/lxc/lxc_driver.c,
src/uml/uml_driver.c, src/xen/xen_driver.c: Update for
streams API change
---
po/POTFILES.in | 1 +
src/Makefile.am | 12 +++
src/fdstream.c | 233 ++++++++++++++++++++++++++++++++++++------------
src/fdstream.h | 5 +
src/lxc/lxc_driver.c | 2 +-
src/qemu/qemu_driver.c | 2 +-
src/uml/uml_driver.c | 2 +-
src/util/iohelper.c | 203 +++++++++++++++++++++++++++++++++++++++++
src/xen/xen_driver.c | 2 +-
9 files changed, 402 insertions(+), 60 deletions(-)
create mode 100644 src/util/iohelper.c
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 805e5ca..12adb3e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -94,6 +94,7 @@ src/util/event_poll.c
src/util/hash.c
src/util/hooks.c
src/util/hostusb.c
+src/util/iohelper.c
src/util/interface.c
src/util/iptables.c
src/util/json.c
diff --git a/src/Makefile.am b/src/Makefile.am
index c3729a6..1d8115b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -380,6 +380,9 @@ STORAGE_DRIVER_DISK_SOURCES = \
STORAGE_HELPER_DISK_SOURCES = \
storage/parthelper.c
+UTIL_IO_HELPER_SOURCES = \
+ util/iohelper.c
+
# Network filters
NWFILTER_DRIVER_SOURCES = \
nwfilter/nwfilter_driver.h nwfilter/nwfilter_driver.c \
@@ -1203,6 +1206,15 @@ EXTRA_DIST += $(LIBVIRT_QEMU_SYMBOL_FILE)
libexec_PROGRAMS =
+libexec_PROGRAMS += libvirt_iohelper
+libvirt_iohelper_SOURCES = $(UTIL_IO_HELPER_SOURCES)
+libvirt_iohelper_LDFLAGS = $(WARN_LDFLAGS) $(AM_LDFLAGS)
+libvirt_iohelper_LDADD = \
+ libvirt_util.la \
+ ../gnulib/lib/libgnu.la
+
+libvirt_iohelper_CFLAGS = $(AM_CFLAGS)
+
Is libvirt_iohelper for libvirtd?
libvirt_iohelper is provided by libvirt-<version>.rpm, but we still install it
when we build withoud libvirtd. We will meet the following problems:
Checking for unpackaged file(s): /usr/lib/rpm/check-files
/home/wency/rpmbuild/BUILDROOT/libvirt-0.9.0-1.el6.x86_64
error: Installed (but unpackaged) file(s) found:
/usr/libexec/libvirt_iohelper
if WITH_STORAGE_DISK
if WITH_LIBVIRTD
libexec_PROGRAMS += libvirt_parthelper