summaryrefslogtreecommitdiff
path: root/common.config
blob: e3f9e452c7d3fd6b02a4873ff097ffc1930a849e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
##/bin/bash
#
# Copyright (c) 2000-2003,2006 Silicon Graphics, Inc.  All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
#
# setup and check for config parameters, and in particular
#
# EMAIL -           email of the script runner.
# TEST_DIR -        scratch test directory that is in an already
#                   mounted XFS file system, needs to be be world
#                   writeable
# TEST_DEV -        device for file system containing TEST_DIR
#
# and optionally:
# SCRATCH_DEV -     device you can make a scratch file system on
# SCRATCH_MNT -     mount point for scratch file system
# SCRATCH_LOGDEV -  scratch log device for external log testing
# SCRATCH_RTDEV -   scratch rt dev
# TEST_LOGDEV -     test log device for external log testing
# TEST_RTDEV -      test rt dev
# TAPE_DEV -        the tape device for the xfsdump tests
# RMT_TAPE_DEV -    the remote tape device for the xfsdump tests
# RMT_IRIXTAPE_DEV- the IRIX remote tape device for the xfsdump tests
# RMT_TAPE_USER -   remote user for tape device
#
# - These can be added to $HOST_CONFIG_DIR (witch default to ./config)
#   below or a separate local configuration file can be used (using
#   the HOST_OPTIONS variable).
# - This script is shared by the stress test system and the auto-qa
#   system (includes both regression test and benchmark components).
# - TEST_DEV & TEST_DIR must be assigned.
# - this script shouldn't make any assertions about filesystem
#   validity or mountedness.
#

# all tests should use a common language setting to prevent golden
# output mismatches.
export LANG=C

# Warning: don't put freeware before /usr/bsd on IRIX coz you'll
#  get the wrong hostname and set your system name to -s  :)
[ -d /usr/bsd ] && PATH=$PATH:/usr/bsd
[ -d /usr/freeware/bin ] && PATH=$PATH:/usr/freeware/bin
PATH=".:$PATH"

HOST=`hostname -s`
HOSTOS=`uname -s`
[ "$HOSTOS" = "IRIX64" ] && HOSTOS="IRIX"

MODULAR=0               # using XFS as a module or not
BOOT="/boot"            # install target for kernels
export EXTRA=${EXTRA:=xfs-qa}

# general parameters (mainly for auto-qa)
SOAK_PROC=3             # -p option to fsstress
SOAK_STRESS=10000       # -n option to fsstress
SOAK_PASSES=-1          # count of repetitions of fsstress (while soaking)
EMAIL=root@localhost    # where auto-qa will send its status messages
export HOST_OPTIONS=${HOST_OPTIONS:=local.config}
export CHECK_OPTIONS=${CHECK_OPTIONS:="-g auto"}
export BENCH_PASSES=${BENCH_PASSES:=5}
export XFS_MKFS_OPTIONS=${XFS_MKFS_OPTIONS:=-bsize=4096}
export TIME_FACTOR=${TIME_FACTOR:=1}
export LOAD_FACTOR=${LOAD_FACTOR:=1}
export DEBUGFS_MNT=${DEBUGFS_MNT:="/sys/kernel/debug"}

export PWD=`pwd`
#export DEBUG=${DEBUG:=...} # arbitrary CFLAGS really.
export MALLOCLIB=${MALLOCLIB:=/usr/lib/libefence.a}
export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}

# $1 = prog to look for, $2* = default pathnames if not found in $PATH
set_prog_path()
{
    p=`which $1 2> /dev/null`
    if [ -n "$p" -a -x "$p" ]; then
        echo $p
        return 0
    fi
    p=$1

    shift
    for f; do
        if [ -x $f ]; then
            echo $f
            return 0
        fi
    done

    echo ""
    return 1
}

_fatal()
{
    echo "$*"
    status=1
    exit 1
}

export MKFS_PROG="`set_prog_path mkfs`"
[ "$MKFS_PROG" = "" ] && _fatal "mkfs not found"

export MOUNT_PROG="`set_prog_path mount`"
[ "$MOUNT_PROG" = "" ] && _fatal "mount not found"

export UMOUNT_PROG="`set_prog_path umount`"
[ "$UMOUNT_PROG" = "" ] && _fatal "umount not found"

export FSSTRESS_PROG="`set_prog_path fsstress $PWD/ltp/fsstress`"
[ "$FSSTRESS_PROG" = "" ] && _fatal "fsstress not found"

export PERL_PROG="`set_prog_path perl`"
[ "$PERL_PROG" = "" ] && _fatal "perl not found"

export AWK_PROG="`set_prog_path awk`"
[ "$AWK_PROG" = "" ] && _fatal "awk not found"

export SED_PROG="`set_prog_path sed`"
[ "$SED_PROG" = "" ] && _fatal "sed not found"

export BC_PROG="`set_prog_path bc`"
[ "$BC_PROG" = "" ] && _fatal "bc not found"

export PS_ALL_FLAGS="-ef"

export DF_PROG="`set_prog_path df`"
[ "$DF_PROG" = "" ] && _fatal "df not found"
[ "$HOSTOS" = "Linux" ] && export DF_PROG="$DF_PROG -T"

export XFS_LOGPRINT_PROG="`set_prog_path xfs_logprint`"
export XFS_REPAIR_PROG="`set_prog_path xfs_repair`"
export XFS_CHECK_PROG="`set_prog_path xfs_check`"
export XFS_DB_PROG="`set_prog_path xfs_db`"
export XFS_GROWFS_PROG=`set_prog_path xfs_growfs`
export XFS_IO_PROG="`set_prog_path xfs_io`"
export XFS_PARALLEL_REPAIR_PROG="`set_prog_path xfs_prepair`"
export XFS_PARALLEL_REPAIR64_PROG="`set_prog_path xfs_prepair64`"
export XFSDUMP_PROG="`set_prog_path xfsdump`"
export XFSRESTORE_PROG="`set_prog_path xfsrestore`"
export XFSINVUTIL_PROG="`set_prog_path xfsinvutil`"
export DBENCH_PROG="`set_prog_path dbench`"
export GETFATTR_PROG="`set_prog_path getfattr`"
export SETFATTR_PROG="`set_prog_path setfattr`"
export ATTR_PROG="`set_prog_path attr`"
export QUOTA_PROG="`set_prog_path quota`"
export XFS_QUOTA_PROG="`set_prog_path xfs_quota`"
export KILLALL_PROG="`set_prog_path killall`"
export INDENT_PROG="`set_prog_path indent`"
export XFS_COPY_PROG="`set_prog_path xfs_copy`"
export FSTRIM_PROG="`set_prog_path fstrim`"
export DUMPE2FS_PROG="`set_prog_path dumpe2fs`"
export FIO_PROG="`set_prog_path fio`"

# Generate a comparable xfsprogs version number in the form of
# major * 10000 + minor * 100 + release
#
# $ xfs_db -V
# xfs_db version 2.9.7
#
# so, 2.9.7 = 20907
_version=`$XFS_DB_PROG -V | $AWK_PROG '
	/version/ {
		if (split($3,ver,".") == 3)
			print (ver[1] * 10000) + (ver[2] * 100) + ver[3];
	}'`
[ -z "$_version" ] && _fatal "xfsprogs version cannot be found"
export XFSPROGS_VERSION="$_version"

case "$HOSTOS" in
    IRIX*)
        export MKFS_XFS_PROG="`set_prog_path mkfs_xfs`"
        export MKFS_UDF_PROG="`set_prog_path mkfs_udf`"
        export XFS_FSR_PROG="`set_prog_path /usr/etc/fsr_xfs`"
        export MKFS_NFS_PROG="false"
        ;;
    Linux)
        export MKFS_XFS_PROG="`set_prog_path mkfs.xfs`"
        export MKFS_UDF_PROG="`set_prog_path mkudffs`"
        export MKFS_BTRFS_PROG="`set_prog_path mkfs.btrfs`"
        export BTRFS_UTIL_PROG="`set_prog_path btrfs`"
        export XFS_FSR_PROG="`set_prog_path xfs_fsr`"
        export MKFS_NFS_PROG="false"
        ;;
esac

known_hosts()
{
  [ "$HOST_CONFIG_DIR" ] || HOST_CONFIG_DIR=`pwd`/configs

  [ -f /etc/xfsqa.config ]             && . /etc/xfsqa.config
  [ -f $HOST_CONFIG_DIR/$HOST ]        && . $HOST_CONFIG_DIR/$HOST
  [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config

  #  Mandatory Config values.
  MC=""
  [ -z "$EMAIL" ]          && MC="$MC EMAIL"
  [ -z "$TEST_DIR" ]       && MC="$MC TEST_DIR"
  [ -z "$TEST_DEV" ]       && MC="$MC TEST_DEV"

  if [ -n "$MC" ]; then
    echo "Warning: need to define parameters for host $HOST"
    echo "       or set variables:"
    echo "       $MC"
    exit 1
  fi
}

if [ -f "$HOST_OPTIONS" ]; then
    . "$HOST_OPTIONS"
else
    known_hosts
fi

echo $TEST_DEV | grep -q ":" > /dev/null 2>&1
if [ ! -b "$TEST_DEV" -a "$?" != "0" ]; then
    echo "common.config: Error: \$TEST_DEV ($TEST_DEV) is not a block device or a NFS filesystem"
    exit 1
fi

if [ ! -d "$TEST_DIR" ]; then
    echo "common.config: Error: \$TEST_DIR ($TEST_DIR) is not a directory"
    exit 1
fi

# a btrfs tester will set only SCRATCH_DEV_POOL, we will put first of its dev
# to SCRATCH_DEV and rest to SCRATCH_DEV_POOL to maintain the backward compatibility
if [ ! -z "$SCRATCH_DEV_POOL" ]; then
    if [ ! -z "$SCRATCH_DEV" ]; then
        echo "common.config: Error: \$SCRATCH_DEV should be unset when \$SCRATCH_DEV_POOL is set"
        exit 1
    fi
    SCRATCH_DEV=`echo $SCRATCH_DEV_POOL | awk '{print $1}'`
    SCRATCH_DEV_POOL=`echo $SCRATCH_DEV_POOL | awk '{ for (i = 2; i <= NF; i++) print $i}'`
fi

echo $SCRATCH_DEV | grep -q ":" > /dev/null 2>&1
if [ ! -z "$SCRATCH_DEV" -a ! -b "$SCRATCH_DEV" -a "$?" != "0" ]; then
    echo "common.config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a block device or a NFS filesystem"
    exit 1
fi

if [ ! -z "$SCRATCH_MNT" -a ! -d "$SCRATCH_MNT" ]; then
    echo "common.config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not a directory"
    exit 1
fi

# make sure this script returns success
/bin/true