Move block device bind/unbind into hotplug scripts.

Fixes file: devices since unbind now runs after the backend driver
closes the loopback device.
Also moves name -> node translation into the backend domain.
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
This commit is contained in:
cl349@firebug.cl.cam.ac.uk committed 2005-09-12 19:49:03 +00:00
1 parent 781cbee39d
commit eccd1bf398
6 files changed
+92 -50

No files matched your search

+1
View File
@@ -21,6 +21,7 @@ XEN_CONFIGS += xmexample.vmx
XEN_SCRIPT_DIR = /etc/xen/scripts
XEN_SCRIPTS = network-bridge vif-bridge
XEN_SCRIPTS += network-route vif-route
XEN_SCRIPTS += block-phy
XEN_SCRIPTS += block-file
XEN_SCRIPTS += block-enbd
+20 -20
View File
@@ -3,31 +3,31 @@
# Usage: block-enbd [bind server ctl_port |unbind node]
#
# The file argument to the bind command is the file we are to bind to a
# loop device. We print the path to the loop device node to stdout.
# loop device.
#
# The node argument to unbind is the name of the device node we are to
# unbind.
#
# This assumes you're running a correctly configured server at the other end!
set -e
case $1 in
bind)
for dev in /dev/nd*; do
if nbd-client $2:$3 $dev; then
echo $dev
exit 0
fi
done
exit 1
;;
unbind)
nbd-client -d $2
exit 0
;;
*)
echo 'Unknown command: ' $1 >&2
echo 'Valid commands are: bind, unbind' >&2
exit 1
bind)
for dev in /dev/nd*; do
if nbd-client $2:$3 $dev; then
major=$(stat -L -c %t "$dev")
minor=$(stat -L -c %T "$dev")
pdev=$(printf "0x%02x%02x" 0x$major 0x$minor)
xenstore-write "$XENBUS_PATH"/physical-device $pdev \
"$XENBUS_PATH"/node $dev
exit 0
fi
done
exit 1
;;
unbind)
nbd-client -d $2
exit 0
;;
esac
+20 -20
View File
@@ -3,29 +3,29 @@
# Usage: block_loop [bind file|unbind node]
#
# The file argument to the bind command is the file we are to bind to a
# loop device. We print the path to the loop device node to stdout.
# loop device.
#
# The node argument to unbind is the name of the device node we are to
# unbind.
set -e
case $1 in
bind)
for dev in /dev/loop*; do
if losetup $dev $2; then
echo $dev
exit 0
fi
done
exit 1
;;
unbind)
losetup -d $2
exit 0
;;
*)
echo 'Unknown command: ' $1 >&2
echo 'Valid commands are: bind, unbind' >&2
exit 1
bind)
for dev in /dev/loop*; do
if losetup $dev $2; then
major=$(stat -L -c %t "$dev")
minor=$(stat -L -c %T "$dev")
pdev=$(printf "0x%02x%02x" 0x$major 0x$minor)
xenstore-write "$XENBUS_PATH"/physical-device $pdev \
"$XENBUS_PATH"/node $dev
exit 0
fi
done
exit 1
;;
unbind)
losetup -d $2
exit 0
;;
esac
+30
View File
@@ -0,0 +1,30 @@
#! /bin/sh
set -e
expand_dev() {
local dev
case $1 in
/*)
dev=$1
;;
*)
dev=/dev/$1
;;
esac
echo -n $dev
}
case $1 in
bind)
dev=$(expand_dev $2)
major=$(stat -L -c %t "$dev")
minor=$(stat -L -c %T "$dev")
pdev=$(printf "0x%02x%02x" 0x$major 0x$minor)
xenstore-write "$XENBUS_PATH"/physical-device $pdev \
"$XENBUS_PATH"/node $dev
exit 0
;;
unbind)
;;
esac
+18
View File
@@ -9,8 +9,26 @@ PATH=/etc/xen/scripts:$PATH
case "$ACTION" in
add)
case "$XENBUS_TYPE" in
vbd)
t=$(xenstore-read "$XENBUS_PATH"/type)
params=$(xenstore-read "$XENBUS_PATH"/params)
[ -x /etc/xen/scripts/block-"$t" ] && \
/etc/xen/scripts/block-"$t" bind $params
;;
esac
;;
remove)
case "$XENBUS_TYPE" in
vbd)
t=$(xenstore-read "$XENBUS_PATH"/type)
node=$(xenstore-read "$XENBUS_PATH"/node)
[ -x /etc/xen/scripts/block-"$t" ] && \
/etc/xen/scripts/block-"$t" unbind $node
;;
esac
# remove device backend store entries
xenstore-rm "$XENBUS_PATH"
;;
online)
case "$PHYSDEVDRIVER" in
+3 -10
View File
@@ -413,17 +413,13 @@ class XendDomainInfo:
db['backend'] = backdb.getPath()
db['backend-id'] = "%i" % backdom.id
backdb['frontend'] = db.getPath()
(type, params) = string.split(sxp.child_value(devconfig, 'uname'), ':', 1)
node = Blkctl.block('bind', type, params)
backdb['type'] = type
backdb['params'] = params
backdb['frontend'] = db.getPath()
backdb['frontend-id'] = "%i" % self.id
backdb['physical-device'] = "%li" % blkdev_name_to_number(node)
backdb.saveDB(save=True)
# Ok, super gross, this really doesn't belong in the frontend db...
db['type'] = type
db['node'] = node
db['params'] = params
db.saveDB(save=True)
return
@@ -808,9 +804,6 @@ class XendDomainInfo:
if type == 'vbd':
typedb = ddb.addChild(type)
for dev in typedb.keys():
devdb = typedb.addChild(str(dev))
Blkctl.block('unbind', devdb['type'].getData(),
devdb['node'].getData())
typedb[dev].delete()
typedb.saveDB(save=True)
if type == 'vtpm':
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.