2 export PATH=$PATH:/sbin:/usr/sbin
6 PORTALS=$SRCDIR/../../portals
7 LUSTRE=$SRCDIR/../../obd
9 PTLCTL=$PORTALS/linux/utils/ptlctl
10 DBGCTL=$PORTALS/linux/utils/debugctl
11 ACCEPTOR=$PORTALS/linux/utils/acceptor
13 OBDCTL=$LUSTRE/utils/obdctl
15 LOOPNUM=0; export LOOPNUM
16 if [ -b /dev/loop0 ]; then
18 elif [ -b /dev/loop/0 ]; then
21 echo "Cannot find /dev/loop0 or /dev/loop/0" 1>&2 && exit -1
27 [ "$MODULE" ] || fail "usage: $0 <module>"
28 [ -f $MODULE ] || fail "$0: module '$MODULE' not found"
30 lsmod | grep -q `basename $MODULE` || insmod $MODULE || exit -1
33 # Return the next unused loop device on stdout and in the $LOOPDEV
34 # environment variable.
37 while [ -b ${LOOP}${LOOPNUM} ]; do
38 LOOPDEV=${LOOP}${LOOPNUM}
39 losetup ${LOOPDEV} > /dev/null 2>&1 || NEXT=${LOOPDEV}
40 LOOPNUM=`expr ${LOOPNUM} + 1`
41 [ "$NEXT" ] && echo ${NEXT} && break
45 # Create a new filesystem. If we are using a loopback device, we check
46 # for existing "template" filesystems instead of creating a new one,
47 # because it is _much_ faster to gunzip the empty filesystem instead of
48 # creating a new one from scratch. Conversely, if we are creating a
49 # filesystem on a device we use mkfs, because that only writes sparsely
50 # to the device. The empty filesystems are also highly compressed (1000:1)
51 # so they don't take too much space.
57 [ "$1" = "ext3" ] && MKFS="mkfs.ext2 -j"
58 if [ "$1" = "extN" ]; then
65 [ $# -lt 2 -o $# -gt 3 ] && \
66 echo "usage: $0 <fstype> <file> [size]" 1>&2 && exit -1
69 [ -r "$PM" ] || PM="/etc/mtab"
71 grep "$2 " $PM 1>&2 && echo "$0: $2 is in $PM!" 1>&2 && exit -1
73 $MKFS $MKFSOPT $2 $3 || exit -1
74 LOOPDEV=$2 # Not really a loop device
77 echo "usage: $0 <fstype> <file> <size>" 1>&2 && exit -1
79 if [ -r "$EFILE" ]; then
80 echo "using prepared filesystem $EFILE for $2"
81 zcat "$EFILE" > $2 || exit -1
84 echo "creating new sparse filesystem on $2"
85 dd if=/dev/zero of=$2 bs=1k seek=$3 count=1 1>&2 || exit -1
86 $MKFS $MKFSOPT -F $2 1>&2 || exit -1
88 LOOPDEV=`next_loop_dev`
89 losetup ${LOOPDEV} $2 1>&2 || exit -1
93 # Set up to use an existing filesystem. We take the same parameters as
94 # new_fs, even though we only use the <fstype> and <file> parameters, to
95 # make it easy to convert between new_fs and old_fs in testing scripts.
99 [ "$1" = "extN" ] && do_insmod extN/extN.o
102 LOOPDEV=$2 # Not really a loop device
104 LOOPDEV=`next_loop_dev`
105 losetup ${LOOPDEV} $2 1>&2 || exit -1
110 $DBGCTL modules > $R/tmp/ogdb
111 echo "The GDB module script is in $R/tmp/ogdb"
112 [ "$DEBUG_WAIT" = "yes" ] && echo -n "Press ENTER to continue" && read
115 # We need at least one setup file to be given. It can be passed on
116 # the command-line, or it can be found in the home directory, or it
117 # can even be sourced into the current shell environment.
119 DEF=$HOME/.lustretestrc
120 [ -r $DEF ] && . $DEF && SETUP=y
124 *.cfg) [ -r "$CFG" ] && . $CFG && SETUP=y ;;
125 *) echo "unknown option '$CFG'" 1>&2
129 if [ "$SETUP" != "y" ]; then
130 echo "error: no config file on command-line and no $DEF" 1>&2
134 [ -z "$MDS_RSH" ] && MDS_RSH="eval"
135 [ -z "$OST_RSH" ] && OST_RSH="eval"
136 [ -z "$OSC_RSH" ] && OSC_RSH="eval"
140 if [ -z "$NETWORK" -o -z "$LOCALHOST" -o -z "$SERVER" ]; then
141 echo "$0: NETWORK or LOCALHOST or SERVER is not set" 1>&2
145 if [ "$LOCALHOST" == "$SERVER" ]; then
151 [ -c /dev/portals ] || mknod /dev/portals c 10 240
153 insmod $PORTALS/linux/oslib/portals.o || exit -1
156 elan) [ "$PORT" ] && fail "$0: NETWORK is elan but PORT is set"
157 insmod $PORTALS/linux/qswnal/kqswnal.o
159 tcp) [ "$PORT" ] || fail "$0: NETWORK is tcp but PORT is not set"
160 insmod $PORTALS/linux/socknal/ksocknal.o || exit -1
163 *) fail "$0: unknown NETWORK '$NETWORK'" ;;
169 connect $SERVER $PORT
180 [ -c /dev/obd ] || mknod /dev/obd c 10 241
182 do_insmod class/obdclass.o
183 do_insmod rpc/ptlrpc.o
184 do_insmod ldlm/ldlm.o
186 do_insmod obdecho/obdecho.o
187 do_insmod ext2obd/obdext2.o
188 do_insmod filterobd/obdfilter.o
192 do_insmod llight/llite.o
196 $OBDCTL <<- EOF || return $rc
203 [ -d /mnt/lustre ] || mkdir /mnt/lustre
207 [ -c /dev/portals ] || mknod /dev/portals c 10 240
209 insmod $PORTALS/linux/oslib/portals.o || exit -1
211 do_insmod class/obdclass.o
212 do_insmod rpc/ptlrpc.o
213 do_insmod ldlm/ldlm.o
221 echo "usage: $0 <devname>" 1>&2
229 [ "$SETUP_MDS" = "y" ] || return 0
231 if [ -z "$MDSFS" -o -z "$MDSDEV" ]; then
232 echo "error: setup_mds: MDSFS or MDSDEV unset" 1>&2
237 if [ "$DO_FS" != "new_fs" -a "$DO_FS" != "old_fs" ]; then
238 echo "usage: setup_mds {new_fs|old_fs}" 1>&2
242 $DO_FS ${MDSFS} ${MDSDEV} ${MDSSIZE}
248 setup ${MDS} ${MDSFS}
254 [ "$SETUP_OST" = "y" ] || return 0
256 if [ -z "$OSTTYPE" ]; then
257 echo "error: setup_ost: OSTTYPE unset" 1>&2
269 obdfilter) OBDARG=$OSTFS
272 *) echo "error: setup_ost: unknown OSTTYPE '$OSTTYPE'" 1>&2
277 if [ "$NEED_FS" = "y" ]; then
279 if [ -z "$OSTFS" -o -z "$OSTDEV" ]; then
280 echo "error: setup_ost: OSTFS or OSTDEV unset" 1>&2
284 if [ "$DO_FS" != "new_fs" -a "$DO_FS" != "old_fs" ]; then
285 echo "usage: setup_ost {new_fs|old_fs}" 1>&2
289 $DO_FS ${OSTFS} ${OSTDEV} ${OSTSIZE}
295 attach ${OSTTYPE} OBDDEV
296 setup ${OBD} ${OBDARG}
305 setup_mds $1 && setup_ost $1
309 [ "$SETUP_OSC" != "y" ] && return 0
311 $OBDCTL <<- EOF || return $rc
320 [ "$SETUP_MOUNT" != "y" ] && return 0
322 [ "$OSCMT" ] || fail "error: $0: OSCMT unset"
324 [ ! -d $OSCMT ] && mkdir $OSCMT
325 mount -t lustre_lite -o device=`find_devno OSCDEV` none $OSCMT
329 setup_osc && setup_mount
332 DEBUG_ON="echo 0xffffffff > /proc/sys/portals/debug"
333 DEBUG_OFF="echo 0 > /proc/sys/portals/debug"
336 [ "$MDS_RSH" ] && echo "Turn OFF debug on MDS" && $MDS_RSH "$DEBUG_OFF"
337 [ "$OST_RSH" ] && echo "Turn OFF debug on OST" && $OST_RSH "$DEBUG_OFF"
341 [ "$MDS_RSH" ] && echo "Turn ON debug on MDS" && $MDS_RSH "$DEBUG_ON"
342 [ "$OST_RSH" ] && echo "Turn ON debug on OST" && $OST_RSH "$DEBUG_ON"
346 echo "Turning OFF debug on client" && $OSC_RSH "$DEBUG_OFF"
350 echo "Turning ON debug on client" && $OSC_RSH "$DEBUG_ON"
392 [ "$SETUP" -a -z "$SETUP_MDS" ] && return 0
394 MDSDEVNO=`find_devno MDSDEV`
395 if [ "$MDSDEVNO" ]; then
406 [ "$SETUP" -a -z "$SETUP_OST" ] && return 0
408 OSTDEVNO=`find_devno OSTDEV`
409 if [ "$OSTDEVNO" ]; then
418 OBDDEVNO=`find_devno OBDDEV`
419 if [ "$OBDDEVNO" ]; then
430 cleanup_ost && cleanup_mds
434 [ "$SETUP" -a -z "$SETUP_MOUNT" ] && return 0
436 [ "$OSCMT" ] || OSCMT=/mnt/lustre
437 if [ "`mount | grep $OSCMT`" ]; then
438 umount $OSCMT || fail "unable to unmount $OSCMT"
443 [ "$SETUP" -a -z "$SETUP_OSC" ] && return 0
445 OSCDEVNO=`find_devno OSCDEV`
446 if [ "$OSCDEVNO" ]; then
457 RPCDEVNO=`find_devno RPCDEV`
458 if [ "$RPCDEVNO" ]; then
469 cleanup_mount && cleanup_osc && cleanup_rpc
473 echo "ERROR: $1" 1>&2
474 [ $2 ] && RC=$2 || RC=1