Files
xen/tools/hotplug/Linux/init.d/xencommons
T
Ian Campbell 3c5b9dcac8 xencommons: Attempt to load blktap2 driver
Older kernels, such as those found in Debian Squeeze:
* Have bugs in handling of AIO into foreign pages
* Have blktap modules, which will cause qemu not to use AIO, but
  which are not loaded on boot.

Attempt to load blktap in xencommons, to make sure modern qemu's which
use AIO will work properly on those kernels.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>

Prefer to load blktap2 if it exists. This is the name of the driver in
classic-Xen ports, while in mainline kernels the driver is called just
blktap.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Jan Beulich <JBeulich@suse.com>
Committed-by: Ian Campbell <ian.campbell@citrix.com>
2012-08-31 11:13:48 +01:00

157 lines
4.3 KiB
Bash

#!/bin/bash
#
# xencommons Script to start and stop xenstored and xenconsoled
#
# Author: Ian Jackson <ian.jackson@eu.citrix.com>
#
# chkconfig: 2345 70 10
# description: Starts and stops xenstored and xenconsoled
### BEGIN INIT INFO
# Provides: xenstored xenconsoled
# Required-Start: $syslog $remote_fs
# Should-Start:
# Required-Stop: $syslog $remote_fs
# Should-Stop:
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop xenstored and xenconsoled
# Description: Starts and stops the daemons neeeded for xl/xend
### END INIT INFO
if [ -d /etc/sysconfig ]; then
xencommons_config=/etc/sysconfig
else
xencommons_config=/etc/default
fi
test -f $xencommons_config/xencommons && . $xencommons_config/xencommons
XENCONSOLED_PIDFILE=/var/run/xenconsoled.pid
shopt -s extglob
# not running in Xen dom0 or domU
if ! test -d /proc/xen ; then
exit 0
fi
# mount xenfs in dom0 or domU with a pv_ops kernel
if test "x$1" = xstart && \
! test -f /proc/xen/capabilities && \
! grep '^xenfs ' /proc/mounts >/dev/null;
then
mount -t xenfs xenfs /proc/xen
fi
# run this script only in dom0:
# no capabilities file in xenlinux domU kernel
# empty capabilities file in pv_ops domU kernel
if test -f /proc/xen/capabilities && \
! grep -q "control_d" /proc/xen/capabilities ; then
exit 0
fi
do_start () {
local time=0
local timeout=30
modprobe xen-evtchn 2>/dev/null
modprobe xen-gntdev 2>/dev/null
modprobe xen-gntalloc 2>/dev/null
modprobe xen-blkback 2>/dev/null
modprobe xen-netback 2>/dev/null
modprobe xen-pciback 2>/dev/null
modprobe evtchn 2>/dev/null
modprobe gntdev 2>/dev/null
modprobe netbk 2>/dev/null
modprobe blkbk 2>/dev/null
modprobe xen-scsibk 2>/dev/null
modprobe usbbk 2>/dev/null
modprobe pciback 2>/dev/null
modprobe xen-acpi-processor 2>/dev/null
modprobe blktap2 2>/dev/null || modprobe blktap 2>/dev/null
mkdir -p /var/run/xen
if ! `xenstore-read -s / >/dev/null 2>&1`
then
test -z "$XENSTORED_ROOTDIR" && XENSTORED_ROOTDIR="/var/lib/xenstored"
rm -f "$XENSTORED_ROOTDIR"/tdb* &>/dev/null
test -z "$XENSTORED_TRACE" || XENSTORED_ARGS=" -T /var/log/xen/xenstored-trace.log"
if [ -n "$XENSTORED" ] ; then
echo -n Starting $XENSTORED...
$XENSTORED --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
elif [ -x /usr/sbin/oxenstored ] ; then
echo -n Starting oxenstored...
/usr/sbin/oxenstored --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
elif [ -x /usr/sbin/xenstored ] ; then
echo -n Starting C xenstored...
/usr/sbin/xenstored --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
else
echo "No xenstored found"
exit 1
fi
# Wait for xenstored to actually come up, timing out after 30 seconds
while [ $time -lt $timeout ] && ! `xenstore-read -s / >/dev/null 2>&1` ; do
echo -n .
time=$(($time+1))
sleep 1
done
echo
# Exit if we timed out
if ! [ $time -lt $timeout ] ; then
echo Could not start xenstored
exit 1
fi
echo Setting domain 0 name...
xenstore-write "/local/domain/0/name" "Domain-0"
fi
echo Starting xenconsoled...
test -z "$XENCONSOLED_TRACE" || XENCONSOLED_ARGS=" --log=$XENCONSOLED_TRACE"
xenconsoled --pid-file=$XENCONSOLED_PIDFILE $XENCONSOLED_ARGS
test -z "$XENBACKENDD_DEBUG" || XENBACKENDD_ARGS="-d"
test "`uname`" != "NetBSD" || xenbackendd $XENBACKENDD_ARGS
echo Starting QEMU as disk backend for dom0
test -z "$QEMU_XEN" && QEMU_XEN=/usr/lib/xen/bin/qemu-system-i386
$QEMU_XEN -xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize -monitor /dev/null
}
do_stop () {
echo Stopping xenconsoled
if read 2>/dev/null <$XENCONSOLED_PIDFILE pid; then
kill $pid
while kill -9 $pid >/dev/null 2>&1; do sleep 0.1; done
rm -f $XENCONSOLED_PIDFILE
fi
echo WARNING: Not stopping xenstored, as it cannot be restarted.
}
case "$1" in
start)
do_start
;;
status)
xenstore-read -s /
;;
stop)
do_stop
;;
reload)
echo >&2 'Reload not available; use force-reload'; exit 1
;;
force-reload|restart)
do_stop
do_start
;;
*)
# do not advertise unreasonable commands that there is no reason
# to use with this device
echo $"Usage: $0 {start|stop|status|restart|force-reload}"
exit 1
esac
exit $?