Whamcloud - gitweb
You don't need to specify the size for new_fs() if you are using a block
[fs/lustre-release.git] / lustre / tests / common.sh
1 export PATH=$PATH:/sbin:/usr/sbin
2
3 if [ -d /r ]; then
4   R=/r
5 fi
6
7 PTLCTL=$SRCDIR/../../portals/linux/utils/ptlctl
8 OBDCTL=$SRCDIR/../../obd/utils/obdctl
9 DEBCTL=$SRCDIR/../../portals/linux/utils/debugctl
10 ACCEPTOR=$SRCDIR/../../portals/linux/utils/acceptor
11
12 LOOPNUM=0; export LOOPNUM
13 if [ -b /dev/loop0 ]; then
14   LOOP=/dev/loop
15 else
16   if [ -b /dev/loop/0 ]; then
17     LOOP=/dev/loop/
18   else
19     echo "Cannot find /dev/loop0 or /dev/loop/0";
20     exit -1
21   fi
22 fi
23
24 # Return the next unused loop device on stdout and in the $LOOPDEV
25 # environment variable.
26 next_loop_dev() {
27         NEXT=
28         while [ -b ${LOOP}${LOOPNUM} ]; do
29                 LOOPDEV=${LOOP}${LOOPNUM}
30                 losetup ${LOOPDEV} > /dev/null 2>&1 || NEXT=${LOOPDEV}
31                 LOOPNUM=`expr ${LOOPNUM} + 1`
32                 [ "$NEXT" ] && echo ${NEXT} && break
33         done
34 }
35
36 # Create a new filesystem.  If we are using a loopback device, we check
37 # for existing "template" filesystems instead of creating a new one,
38 # because it is _much_ faster to gunzip the empty filesystem instead of
39 # creating a new one from scratch.  Conversely, if we are creating a
40 # filesystem on a device we use mkfs, because that only writes sparsely
41 # to the device.  The empty filesystems are also highly compressed (1000:1)
42 # so they don't take too much space.
43 new_fs () {
44         EFILE="$1_$3.gz"
45         MKFS="mkfs.$1"
46         MKFSOPT="-b 4096"
47
48         [ "$1" = "ext3" ] && MKFS="mkfs.ext2 -j"
49
50         if [ -b "$2" ]; then
51                 [ $# -lt 2 -o $# -gt 3 ] && \
52                         echo "usage: $0 <fstype> <file> [size]" 1>&2 && exit -1
53
54                 $MKFS $MKFSOPT $2 $3 || exit -1
55                 LOOPDEV=$2      # Not really a loop device
56         else
57                 [ $# -ne 3 ] && \
58                         echo "usage: $0 <fstype> <file> <size>" 1>&2 && exit -1
59
60                 if [ -f "$EFILE" ]; then
61                         echo "using existing filesystem $EFILE for $2"
62                         zcat "$EFILE" > $2 || exit -1
63                         sync
64                 else
65                         echo "creating new filesystem on $2"
66                         dd if=/dev/zero of=$2 bs=1k count=$3 1>&2 || exit -1
67                         $MKFS $MKFSOPT -F $2 1>&2 || exit -1
68                 fi
69                 LOOPDEV=`next_loop_dev`
70                 losetup ${LOOPDEV} $2 1>&2 || exit -1
71         fi
72 }
73
74 # Set up to use an existing filesystem.  We take the same parameters as
75 # new_fs, even though we only use the <file> parameter, to make it easy
76 # to convert between new_fs and old_fs in testing scripts.
77 old_fs () {
78         [ -e $2 ] || exit -1
79
80         if [ -b "$2" ]; then
81                 LOOPDEV=$2      # Not really a loop device
82         else
83                 LOOPDEV=`next_loop_dev`
84                 losetup ${LOOPDEV} $2 1>&2 || exit -1
85         fi
86 }
87
88 list_mods() {
89         $DEBCTL modules > $R/tmp/ogdb
90         echo "The GDB module script is in /tmp/ogdb.  Press enter to continue"
91         read
92 }
93
94 setup() {
95     [ -c /dev/portals ] || mknod /dev/portals c 10 240
96
97     insmod $SRCDIR/../../portals/linux/oslib/portals.o || exit -1
98     insmod $SRCDIR/../../portals/linux/qswnal/kqswnal.o
99     insmod $SRCDIR/../../portals/linux/socknal/ksocknal.o || exit -1
100
101     [ "$NETWORK" = "tcp" ] && ($ACCEPTOR $PORT &)
102
103     [ -c /dev/obd ] || mknod /dev/obd c 10 241
104
105     insmod $SRCDIR/../../obd/class/obdclass.o || exit -1
106     insmod $SRCDIR/../../obd/rpc/ptlrpc.o || exit -1
107     insmod $SRCDIR/../../obd/ldlm/ldlm.o || exit -1
108     insmod $SRCDIR/../../obd/ext2obd/obdext2.o || exit -1
109     insmod $SRCDIR/../../obd/filterobd/obdfilter.o || exit -1
110     insmod $SRCDIR/../../obd/ost/ost.o || exit -1
111     insmod $SRCDIR/../../obd/osc/osc.o || exit -1
112     insmod $SRCDIR/../../obd/obdecho/obdecho.o || exit -1
113     insmod $SRCDIR/../../obd/mds/mds.o || exit -1
114     insmod $SRCDIR/../../obd/mdc/mdc.o || exit -1
115     insmod $SRCDIR/../../obd/llight/llight.o || exit -1
116
117     list_mods
118
119     [ -d /mnt/obd ] || mkdir /mnt/obd
120 }
121
122 setup_portals() {
123         if [ -z "$NETWORK" -o -z "$LOCALHOST" -o -z "$SERVER" ]; then
124                 echo "$0: NETWORK or LOCALHOST or SERVER is not set"
125                 exit -1
126         fi
127
128         case $NETWORK in
129         elan)   if [ "$PORT" ]; then
130                         echo "$0: NETWORK is elan but PORT is set"
131                         exit -1
132                 fi
133                 ;;
134         tcp)    if [ -z "$PORT" ]; then
135                         echo "$0: NETWORK is tcp but PORT is not set"
136                         exit -1
137                 fi
138                 ;;
139         *)      echo "$0: unknown NETWORK \'$NETWORK\'"
140                 exit -1
141                 ;;
142         esac
143
144         $PTLCTL <<- EOF
145         setup $NETWORK
146         mynid $LOCALHOST
147         connect $SERVER $PORT
148         add_uuid self
149         add_uuid mds
150         add_uuid ost
151         quit
152         EOF
153 }
154
155 setup_ldlm() {
156     [ -c /dev/portals ] || mknod /dev/portals c 10 240
157
158     insmod $SRCDIR/../../portals/linux/oslib/portals.o || exit -1
159
160     insmod $SRCDIR/../../obd/class/obdclass.o || exit -1
161     insmod $SRCDIR/../../obd/ldlm/ldlm.o || exit -1
162
163     list_mods
164 }