set -e
ONLY=${ONLY:-"$*"}
-# bug number for skipped test: 4900 4900 2108 9789 3637 9789 3561 5188/5749 10764
-ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"27o 27q 42a 42b 42c 42d 45 68 75"}
+# bug number for skipped test: 4900 4900 2108 9789 3637 9789 3561 5188/5749 13310 10764
+ALWAYS_EXCEPT=" 27o 27q 42a 42b 42c 42d 45 68 74b 75 $SANITY_EXCEPT"
# bug number for skipped test: 2108 9789 3637 9789 3561 5188/5749 1443
#ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"27m 42a 42b 42c 42d 45 68 76"}
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
ACCEPTOR_PORT=${ACCEPTOR_PORT:-988}
UMOUNT=${UMOUNT:-"umount -d"}
STRIPES_PER_OBJ=-1
+CHECK_GRANT=${CHECK_GRANT:-"yes"}
+GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""}
if [ $UID -ne 0 ]; then
echo "Warning: running as non-root uid $UID"
fi
fi
-SANITYLOG=${SANITYLOG:-/tmp/sanity.log}
-
export NAME=${NAME:-local}
SAVE_PWD=$PWD
+CLEANUP=${CLEANUP:-:}
+SETUP=${SETUP:-:}
+TRACE=${TRACE:-""}
LUSTRE=${LUSTRE:-`dirname $0`/..}
. $LUSTRE/tests/test-framework.sh
init_test_env $@
. ${CONFIG:=$LUSTRE/tests/cfg/local.sh}
-if [ ! -z "$USING_KRB5" ]; then
+if $GSS_KRB5; then
$RUNAS krb5_login.sh || exit 1
$RUNAS -u $(($RUNAS_ID + 1)) krb5_login.sh || exit 1
fi
+SANITYLOG=${TESTSUITELOG:-$TMP/$(basename $0 .sh).log}
+FAIL_ON_ERROR=false
+
cleanup() {
echo -n "cln.."
cleanupall ${FORCE} $* || { echo "FAILed to clean up"; exit 20; }
}
-CLEANUP=${CLEANUP:-:}
-
setup() {
echo -n "mnt.."
load_modules
setupall || exit 10
echo "done"
}
-SETUP=${SETUP:-:}
-
-log() {
- echo "$*"
- $LCTL mark "$*" 2> /dev/null || true
-}
-
-trace() {
- log "STARTING: $*"
- strace -o $TMP/$1.strace -ttt $*
- RC=$?
- log "FINISHED: $*: rc $RC"
- return 1
-}
-TRACE=${TRACE:-""}
check_kernel_version() {
VERSION_FILE=$LPROC/version
return 1
}
-_basetest() {
- echo $*
-}
-
-basetest() {
- IFS=abcdefghijklmnopqrstuvwxyz _basetest $1
-}
-
-run_one() {
- if ! grep -q $DIR /proc/mounts; then
- $SETUP
- fi
- testnum=$1
- message=$2
- BEFORE=`date +%s`
- log "== test $testnum: $message= `date +%H:%M:%S` ($BEFORE)"
- export TESTNAME=test_$testnum
- export tfile=f${testnum}
- export tdir=d${base}
- test_${testnum} || error "exit with rc=$?"
- unset TESTNAME
- pass "($((`date +%s` - $BEFORE))s)"
- cd $SAVE_PWD
- $CLEANUP
-}
-
-build_test_filter() {
- [ "$ALWAYS_EXCEPT$EXCEPT$SANITY_EXCEPT" ] && \
- echo "Skipping tests: `echo $ALWAYS_EXCEPT $EXCEPT $SANITY_EXCEPT`"
-
- for O in $ONLY; do
- eval ONLY_${O}=true
- done
- for E in $EXCEPT $ALWAYS_EXCEPT $SANITY_EXCEPT; do
- eval EXCEPT_${E}=true
- done
-}
-
-_basetest() {
- echo $*
-}
-
-basetest() {
- IFS=abcdefghijklmnopqrstuvwxyz _basetest $1
-}
-
-run_test() {
- export base=`basetest $1`
- if [ "$ONLY" ]; then
- testname=ONLY_$1
- if [ ${!testname}x != x ]; then
- run_one $1 "$2"
- return $?
- fi
- testname=ONLY_$base
- if [ ${!testname}x != x ]; then
- run_one $1 "$2"
- return $?
- fi
- echo -n "."
- return 0
- fi
- testname=EXCEPT_$1
- if [ ${!testname}x != x ]; then
- echo "skipping excluded test $1"
- return 0
- fi
- testname=EXCEPT_$base
- if [ ${!testname}x != x ]; then
- echo "skipping excluded test $1 (base $base)"
- return 0
- fi
- run_one $1 "$2"
- return $?
-}
+if [ "$ONLY" == "cleanup" ]; then
+ sh llmountcleanup.sh
+ exit 0
+fi
[ "$SANITYLOG" ] && rm -f $SANITYLOG || true
-error() {
- sysctl -w lustre.fail_loc=0
- log "$0: FAIL: $TESTNAME $@"
- $LCTL dk $TMP/lustre-log-$TESTNAME.log
- if [ "$SANITYLOG" ]; then
- echo "$0: FAIL: $TESTNAME $@" >> $SANITYLOG
- else
- exit 1
- fi
- sysctl -w lustre.fail_loc=0
-}
-
-pass() {
- echo PASS $@
-}
-
-mounted_lustre_filesystems() {
- awk '($3 ~ "lustre" && $1 ~ ":") { print $2 }' /proc/mounts
-}
-
-MOUNTED="`mounted_lustre_filesystems`"
-if [ -z "$MOUNTED" ]; then
- formatall
- setupall
- MOUNTED="`mounted_lustre_filesystems`"
- [ -z "$MOUNTED" ] && error "NAME=$NAME not mounted"
- I_MOUNTED=yes
-fi
+check_and_setup_lustre
DIR=${DIR:-$MOUNT}
[ -z "`echo $DIR | grep $MOUNT`" ] && echo "$DIR not in $MOUNT" && exit 99
STRIPESIZE=`cat $LPROC/lov/$LOVNAME/stripesize`
ORIGFREE=`cat $LPROC/lov/$LOVNAME/kbytesavail`
MAXFREE=${MAXFREE:-$((200000 * $OSTCOUNT))}
-MDS=$(\ls $LPROC/mdt 2> /dev/null | grep -v num_refs | tail -n 1)
[ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo
[ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foo
run_test 6a "touch .../f6a; chmod .../f6a ======================"
test_6b() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
if [ ! -f $DIR/f6a ]; then
touch $DIR/f6a
chmod 0666 $DIR/f6a
run_test 6b "$RUNAS chmod .../f6a (should return error) =="
test_6c() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
touch $DIR/f6c
chown $RUNAS_ID $DIR/f6c || error
$CHECKSTAT -t file -u \#$RUNAS_ID $DIR/f6c || error
run_test 6c "touch .../f6c; chown .../f6c ======================"
test_6d() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
if [ ! -f $DIR/f6c ]; then
touch $DIR/f6c
chown $RUNAS_ID $DIR/f6c
run_test 6d "$RUNAS chown .../f6c (should return error) =="
test_6e() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
touch $DIR/f6e
chgrp $RUNAS_ID $DIR/f6e || error
$CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/f6e || error
run_test 6e "touch .../f6e; chgrp .../f6e ======================"
test_6f() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
if [ ! -f $DIR/f6e ]; then
touch $DIR/f6e
chgrp $RUNAS_ID $DIR/f6e
run_test 6f "$RUNAS chgrp .../f6e (should return error) =="
test_6g() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
mkdir $DIR/d6g || error
chmod 777 $DIR/d6g || error
$RUNAS mkdir $DIR/d6g/d || error
run_test 6g "Is new dir in sgid dir inheriting group?"
test_6h() { # bug 7331
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
touch $DIR/f6h || error "touch failed"
chown $RUNAS_ID:$RUNAS_ID $DIR/f6h || error "initial chown failed"
$RUNAS -G$RUNAS_ID chown $RUNAS_ID:0 $DIR/f6h && error "chown worked"
run_test 19b "ls -l .../f19 (should return error) =============="
test_19c() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
$RUNAS touch $DIR/f19 && error || true
}
run_test 19c "$RUNAS touch .../f19 (should return error) =="
}
run_test 24t "mkdir .../R16a/b/c; rename .../R16a/b/c .../R16a ="
+test_24u() { # bug12192
+ multiop $DIR/$tfile C2w$((2048 * 1024))c || error
+ $CHECKSTAT -s $((2048 * 1024)) $DIR/$tfile || error "wrong file size"
+}
+run_test 24u "create stripe file"
+
test_25a() {
echo '== symlink sanity ============================================='
run_test 27a "one stripe file =================================="
test_27c() {
- [ "$OSTCOUNT" -lt "2" ] && echo "skipping 2-stripe test" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "skipping 2-stripe test" && return
mkdir -p $DIR/d27
$SETSTRIPE $DIR/d27/f01 65536 0 2 || error "lstripe failed"
[ `$GETSTRIPE $DIR/d27/f01 | grep -A 10 obdidx | wc -l` -eq 4 ] ||
run_test 27l "check setstripe permissions (should return error)"
test_27m() {
- [ "$OSTCOUNT" -lt "2" ] && echo "skipping out-of-space test on OST0" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "$OSTCOUNT < 2 OSTs -- skipping" && return
if [ $ORIGFREE -gt $MAXFREE ]; then
- echo "skipping out-of-space test on OST0"
+ skip "$ORIGFREE > $MAXFREE skipping out-of-space test on OST0"
return
fi
mkdir -p $DIR/d27
}
test_27n() {
- [ "$OSTCOUNT" -lt "2" -o -z "$MDS" ] && \
- echo "skip $TESTNAME for remote MDS or OST count" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return
+ remote_mds && skip "remote MDS" && return
reset_enospc
rm -f $DIR/d27/f27n
run_test 27n "create file with some full OSTs =================="
test_27o() {
- [ "$OSTCOUNT" -lt "2" -o -z "$MDS" ] && echo "skipping $TESTNAME" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return
+ remote_mds && skip "remote MDS" && return
reset_enospc
rm -f $DIR/d27/f27o
run_test 27o "create file with all full OSTs (should error) ===="
test_27p() {
- [ "$OSTCOUNT" -lt "2" -o -z "$MDS" ] && echo "skipping $TESTNAME" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return
+ remote_mds && skip "remote MDS" && return
reset_enospc
rm -f $DIR/d27/f27p
run_test 27p "append to a truncated file with some full OSTs ==="
test_27q() {
- [ "$OSTCOUNT" -lt "2" -o -z "$MDS" ] && echo "skipping $TESTNAME" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return
+ remote_mds && skip "remote MDS" && return
reset_enospc
rm -f $DIR/d27/f27q
run_test 27q "append to truncated file with all OSTs full (should error) ==="
test_27r() {
- [ "$OSTCOUNT" -lt "2" -o -z "$MDS" ] && echo "skipping $TESTNAME" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return
+ remote_mds && skip "remote MDS" && return
reset_enospc
rm -f $DIR/d27/f27r
}
run_test 27t "check that utils parse path correctly"
-test_27x() { # bug 10997
+test_27u() { # bug 4900
+ [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return
+ remote_mds && skip "remote MDS" && return
+
+ #define OBD_FAIL_MDS_OSC_PRECREATE 0x13d
+
+ sysctl -w lustre.fail_loc=0x13d
+ mkdir -p $DIR/d27u
+ createmany -o $DIR/d27u/t- 1000
+ sysctl -w lustre.fail_loc=0
+
+ $LFS getstripe $DIR/d27u > $TMP/files
+ OBJS=`cat $TMP/files | awk -vobjs=0 '($1 == 0) { objs += 1 } END { print objs;}'`
+ unlinkmany $DIR/d27u/t- 1000
+ [ $OBJS -gt 0 ] && \
+ error "Found $OBJS objects were created on OST-0" || pass
+}
+run_test 27u "skip object creation on OSC w/o objects =========="
+
+test_27v() { # bug 4900
+ [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return
+ remote_mds && skip "remote MDS" && return
+
+ exhaust_all_precreations
+
+ mkdir -p $DIR/$tdir
+ lfs setstripe $DIR/$tdir 0 -1 1 # 1 stripe / file
+
+ touch $DIR/$tdir/$tfile
+ #define OBD_FAIL_TGT_DELAY_PRECREATE 0x705
+ sysctl -w lustre.fail_loc=0x705
+ START=`date +%s`
+ for F in `seq 1 32`; do
+ touch $DIR/$tdir/$tfile.$F
+ done
+ sysctl -w lustre.fail_loc=0
+
+ FINISH=`date +%s`
+ TIMEOUT=`sysctl -n lustre.timeout`
+ [ $((FINISH - START)) -ge $((TIMEOUT / 2)) ] && \
+ error "$FINISH - $START >= $TIMEOUT / 2"
+
+ reset_enospc
+}
+run_test 27v "skip object creation on slow OST ================="
+
+test_27w() { # bug 10997
mkdir -p $DIR/d27w || error "mkdir failed"
$LSTRIPE $DIR/d27w/f0 -s 65536 || error "lstripe failed"
size=`$LSTRIPEINFO $DIR/d27w/f0 | awk {'print $1'}`
[ $size -ne 65536 ] && error "stripe size $size != 65536" || true
- [ "$OSTCOUNT" -lt "2" ] && echo "skipping multiple stripe count/offset test" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "skipping multiple stripe count/offset test" && return
for i in `seq 1 $OSTCOUNT`; do
offset=$(($i-1))
$LSTRIPE $DIR/d27w/f$i -c $i -i $offset || error "lstripe -c $i -i $offset failed"
[ $index -ne $offset ] && error "stripe offset $index != $offset" || true
done
}
-run_test 27x "check lfs setstripe -c -s -i options ============="
+run_test 27w "check lfs setstripe -c -s -i options ============="
test_28() {
mkdir $DIR/d28
run_test 36d "non-root OST utime check (open, utime) ==========="
test_36e() {
- [ $RUNAS_ID -eq $UID ] && echo "skipping $TESTNAME" && return
+ [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
mkdir -p $DIR/$tdir
touch $DIR/$tdir/$tfile
$RUNAS utime $DIR/$tdir/$tfile && \
}
run_test 36f "utime on file racing with OST BRW write =========="
-if [ -d $LPROC/obdfilter ]; then
-export FMD_MAX_AGE=`cat $LPROC/obdfilter/*/client_cache_seconds | head -n 1`
-fi
+export FMD_MAX_AGE=`do_facet ost1 cat $LPROC/obdfilter/*/client_cache_seconds | head -n 1`
test_36g() {
- [ -z "$FMD_MAX_AGE" ] && echo "skip $TESTNAME for remote OST" && return
+ [ -z "$FMD_MAX_AGE" ] && skip "skip test for remote OST" && return
FMD_BEFORE="`awk '/ll_fmd_cache/ { print $2 }' /proc/slabinfo`"
touch $DIR/d36/$tfile
sleep $((FMD_MAX_AGE + 12))
run_test 43c "md5sum of copy into lustre========================"
test_44() {
- [ "$OSTCOUNT" -lt "2" ] && echo "skipping 2-stripe test" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "skipping 2-stripe test" && return
dd if=/dev/zero of=$DIR/f1 bs=4k count=1 seek=1023
- dd if=$DIR/f1 bs=4k count=1
+ dd if=$DIR/f1 bs=4k count=1 > /dev/null
}
run_test 44 "zero length read from a sparse stripe ============="
test_44a() {
local nstripe=`$LCTL lov_getconfig $DIR | grep default_stripe_count: | \
awk '{print $2}'`
+ [ -z "$nstripe" ] && skip "can't get stripe info" && return
+ [ "$nstripe" -gt "$OSTCOUNT" ] && skip "Wrong default_stripe_count: $nstripe (OSTCOUNT: $OSTCOUNT)" && return
local stride=`$LCTL lov_getconfig $DIR | grep default_stripe_size: | \
awk '{print $2}'`
if [ $nstripe -eq 0 -o $nstripe -gt 1024 ] ; then
nstripe=`$LCTL lov_getconfig $DIR | grep obd_count: | awk '{print $2}'`
fi
- [ -z "$nstripe" ] && error "can't get stripe info"
OFFSETS="0 $((stride/2)) $((stride-1))"
for offset in $OFFSETS ; do
touch .foo || error "'touch .foo' failed after recreating cwd"
mkdir .bar || error "'mkdir .foo' failed after recreating cwd"
fi
- ls . || error "'ls .' failed after recreating cwd"
- ls .. || error "'ls ..' failed after removing cwd"
+ ls . > /dev/null || error "'ls .' failed after recreating cwd"
+ ls .. > /dev/null || error "'ls ..' failed after removing cwd"
cd . || error "'cd .' failed after recreating cwd"
mkdir . && error "'mkdir .' worked after recreating cwd"
rmdir . && error "'rmdir .' worked after recreating cwd"
touch .foo && error "'touch .foo' worked after removing cwd"
mkdir .foo && error "'mkdir .foo' worked after removing cwd"
fi
- ls . && error "'ls .' worked after removing cwd"
- ls .. || error "'ls ..' failed after removing cwd"
- cd . && error "'cd .' worked after removing cwd"
+ ls . > /dev/null && error "'ls .' worked after removing cwd"
+ ls .. > /dev/null || error "'ls ..' failed after removing cwd"
+ is_patchless || ( cd . && error "'cd .' worked after removing cwd" )
mkdir . && error "'mkdir .' worked after removing cwd"
rmdir . && error "'rmdir .' worked after removing cwd"
ln -s . foo && error "'ln -s .' worked after removing cwd"
fi
$TRACE ls . && error "'ls .' worked after removing cwd"
$TRACE ls .. || error "'ls ..' failed after removing cwd"
- $TRACE cd . && error "'cd .' worked after removing cwd"
+ is_patchless || ( $TRACE cd . && error "'cd .' worked after removing cwd" )
$TRACE mkdir . && error "'mkdir .' worked after removing cwd"
$TRACE rmdir . && error "'rmdir .' worked after removing cwd"
$TRACE ln -s . foo && error "'ln -s .' worked after removing cwd"
fi
$TRACE ls . && error "'ls .' worked after removing parent"
$TRACE ls .. && error "'ls ..' worked after removing parent"
- $TRACE cd . && error "'cd .' worked after recreate parent"
+ is_patchless || ( $TRACE cd . && error "'cd .' worked after recreate parent" )
$TRACE mkdir . && error "'mkdir .' worked after removing parent"
$TRACE rmdir . && error "'rmdir .' worked after removing parent"
$TRACE ln -s . foo && error "'ln -s .' worked after removing parent"
- $TRACE cd .. && error "'cd ..' worked after removing parent" || true
+ is_patchless || ( $TRACE cd .. && error "'cd ..' worked after removing parent" || true )
}
run_test 48d "Access removed parent subdir (should return errors)"
test_51b() {
NUMFREE=`df -i -P $DIR | tail -n 1 | awk '{ print $4 }'`
[ $NUMFREE -lt 21000 ] && \
- echo "skipping $TESTNAME, not enough free inodes ($NUMFREE)" && \
+ skip "not enough free inodes ($NUMFREE)" && \
return
check_kernel_version 40 || NUMTEST=31000
run_test 51b "mkdir .../t-0 --- .../t-$NUMTEST ===================="
test_51c() {
- [ ! -d $DIR/d51b ] && echo "skipping $TESTNAME: $DIR/51b missing" && \
+ [ ! -d $DIR/d51b ] && skip "$DIR/51b missing" && \
return
unlinkmany -d $DIR/d51b/t- $NUMTEST
run_test 51c "rmdir .../t-0 --- .../t-$NUMTEST ===================="
test_51d() {
- [ "$OSTCOUNT" -lt "3" ] && echo "skipping test with few OSTs" && return
+ [ "$OSTCOUNT" -lt "3" ] && skip "skipping test with few OSTs" && return
mkdir -p $DIR/d51d
createmany -o $DIR/d51d/t- 1000
$LFS getstripe $DIR/d51d > $TMP/files
run_test 52b "immutable flag test (should return errors) ======="
test_53() {
+ remote_mds && skip "remote MDS" && return
+
# only test MDT0000
for i in `ls -d $LPROC/osc/*-osc-MDT0000 2> /dev/null` ; do
ostname=`basename $i | cut -d - -f 1-2`
run_test 53 "verify that MDS and OSTs agree on pre-creation ===="
test_54a() {
- [ ! -f "$SOCKETSERVER" ] && echo "no socketserver, skipping" && return
- [ ! -f "$SOCKETCLIENT" ] && echo "no socketclient, skipping" && return
+ [ ! -f "$SOCKETSERVER" ] && skip "no socketserver, skipping" && return
+ [ ! -f "$SOCKETCLIENT" ] && skip "no socketclient, skipping" && return
$SOCKETSERVER $DIR/socket
$SOCKETCLIENT $DIR/socket || error
$MUNLINK $DIR/socket
test_55() {
rm -rf $DIR/d55
mkdir $DIR/d55
- check_fstype && echo "can't find fs $FSTYPE, skipping $TESTNAME" && return
+ check_fstype && skip "can't find fs $FSTYPE" && return
mount -t $FSTYPE -o loop,iopen $EXT2_DEV $DIR/d55 || error "mounting"
touch $DIR/d55/foo
$IOPENTEST1 $DIR/d55/foo $DIR/d55 || error "running $IOPENTEST1"
error "lfs getstripe --obd wrong_uuid should return error message"
[ "$OSTCOUNT" -lt 2 ] && \
- echo "skipping other lfs getstripe --obd test" && return
+ skip "skipping other lfs getstripe --obd test" && return
FILENUM=`$GETSTRIPE --recursive $DIR/d56 | sed -n '/^[ ]*1[ ]/p' | wc -l`
OBDUUID=`$GETSTRIPE --recursive $DIR/d56 | sed -n '/^[ ]*1:/p' | awk '{print $2}'`
FOUND=`$GETSTRIPE -r --obd $OBDUUID $DIR/d56 | wc -l`
}
run_test 56h "check lfs find ! -name ============================="
+test_56i() {
+ tdir=${tdir}i
+ mkdir -p $DIR/$tdir
+ UUID=`$GETSTRIPE $DIR/$tdir | awk '/0: / { print $2 }'`
+ OUT="`$LFIND -ost $UUID $DIR/$tdir`"
+ [ "$OUT" ] && error "$LFIND returned directory '$OUT'" || true
+}
+run_test 56i "check 'lfs find -ost UUID' skips directories ======="
+
test_57a() {
# note test will not do anything if MDS is not local
- [ -z "$MDS" ] && echo "skipping $TESTNAME for remote MDS" && return
+ remote_mds && skip "remote MDS" && return
+
for DEV in `cat $LPROC/mds/*/mntdev`; do
dumpe2fs -h $DEV > $TMP/t57a.dump || error "can't access $DEV"
DEVISIZE=`awk '/Inode size:/ { print $3 }' $TMP/t57a.dump`
run_test 57b "default LOV EAs are stored inside large inodes ==="
test_58() {
- [ -z "$(which wiretest 2>/dev/null)" ] && echo "skipping $TESTNAME (could not find wiretest)" && return
+ [ -z "$(which wiretest 2>/dev/null)" ] && skip "could not find wiretest" && return
wiretest
}
run_test 58 "verify cross-platform wire constants =============="
TEST60_HEAD="test_60 run $RANDOM"
test_60a() {
- [ ! -f run-llog.sh ] && echo "missing subtest, skipping" && return
+ [ ! -f run-llog.sh ] && skip "missing subtest run-llog.sh" && return
log "$TEST60_HEAD - from kernel mode"
# sh run-llog.sh
}
# bug 2248 - async write errors didn't return to application on sync
# bug 3677 - async write errors left page locked
test_63b() {
- DBG_SAVE="`sysctl -n lnet.debug`"
+ debugsave
sysctl -w lnet.debug=-1
# ensure we have a grant to do async writes
#define OBD_FAIL_OSC_BRW_PREP_REQ 0x406
sysctl -w lustre.fail_loc=0x80000406
multiop $DIR/$tfile Owy && \
- $LCTL dk /tmp/test63b.debug && \
- sysctl -w lnet.debug="$DBG_SAVE" && \
error "sync didn't return ENOMEM"
sync; sleep 2; sync # do a real sync this time to flush page
grep locked $LPROC/llite/*/dump_page_cache && \
- $LCTL dk /tmp/test63b.debug && \
- sysctl -w lnet.debug="$DBG_SAVE" && \
error "locked page left in cache after async error" || true
- sysctl -w lnet.debug="$DBG_SAVE"
+ debugrestore
}
run_test 63b "async write errors should be returned to fsync ==="
run_test 64a "verify filter grant calculations (in kernel) ====="
test_64b () {
- [ ! -f oos.sh ] && echo "missing subtest, skipping" && return
+ [ ! -f oos.sh ] && skip "missing subtest oos.sh" && return
sh oos.sh $MOUNT
}
run_test 64b "check out-of-space detection on client ==========="
}
run_test 65c "directory setstripe $(($STRIPESIZE * 4)) 1 $(($OSTCOUNT - 1))"
-if [ $STRIPECOUNT -eq 0 ]; then
- sc=1
-elif [ $STRIPECOUNT -gt 160 ]; then
-#LOV_MAX_STRIPE_COUNT is 160, 4294967295(-1) is included.
- [ $OSTCOUNT -gt 160 ] && sc=160 || sc=$(($OSTCOUNT - 1))
-else
- sc=$(($STRIPECOUNT - 1))
-fi
-
test_65d() {
mkdir -p $DIR/d65
+ if [ $STRIPECOUNT -le 0 ]; then
+ sc=1
+ elif [ $STRIPECOUNT -gt 160 ]; then
+#LOV_MAX_STRIPE_COUNT is 160
+ [ $OSTCOUNT -gt 160 ] && sc=160 || sc=$(($OSTCOUNT - 1))
+ else
+ sc=$(($STRIPECOUNT - 1))
+ fi
$SETSTRIPE $DIR/d65 $STRIPESIZE -1 $sc || error "setstripe"
touch $DIR/d65/f4 $DIR/d65/f5
$LVERIFY $DIR/d65 $DIR/d65/f4 $DIR/d65/f5 || error "lverify failed"
}
-run_test 65d "directory setstripe $STRIPESIZE -1 $sc =============="
+run_test 65d "directory setstripe $STRIPESIZE -1 stripe_count =============="
test_65e() {
mkdir -p $DIR/d65
cleanup -f || error "failed to unmount"
setup
fi
- $SETSTRIPE -d $MOUNT
+ $SETSTRIPE -d $MOUNT || error "setstripe failed"
}
run_test 65j "set default striping on root directory (bug 6367)="
+test_65k() { # bug11679
+ [ "$OSTCOUNT" -lt 2 ] && skip "too few OSTs" && return
+
+ echo "Check OST status: "
+ MDS_OSCS=`do_facet mds lctl dl | awk '/[oO][sS][cC].*md[ts]/ { print $4 }'`
+ for OSC in $MDS_OSCS; do
+ echo $OSC "is activate"
+ do_facet mds lctl --device %$OSC activate
+ done
+ do_facet client mkdir -p $DIR/$tdir
+ for INACTIVE_OSC in $MDS_OSCS; do
+ echo $INACTIVE_OSC "is Deactivate:"
+ do_facet mds lctl --device %$INACTIVE_OSC deactivate
+ for STRIPE_OSC in $MDS_OSCS; do
+ STRIPE_OST=`osc_to_ost $STRIPE_OSC`
+ STRIPE_INDEX=`do_facet mds cat $LPROC/lov/*md*/target_obd |
+ grep $STRIPE_OST | awk -F: '{print $1}'`
+ echo "$SETSTRIPE $DIR/$tdir/${STRIPE_INDEX} 0 ${STRIPE_INDEX} 1"
+ do_facet client $SETSTRIPE $DIR/$tdir/${STRIPE_INDEX} 0 ${STRIPE_INDEX} 1
+ RC=$?
+ [ $RC -ne 0 ] && error "setstripe should have succeeded"
+ done
+ do_facet client rm -f $DIR/$tdir/*
+ echo $INACTIVE_OSC "is Activate."
+ do_facet mds lctl --device %$INACTIVE_OSC activate
+ done
+}
+run_test 65k "validate manual striping works properly with deactivated OSCs"
+
+test_65l() { # bug 12836
+ mkdir -p $DIR/$tdir/test_dir
+ $LFS setstripe $DIR/$tdir/test_dir 65536 -1 -1
+ $LFS find -mtime -1 $DIR/$tdir
+}
+run_test 65l "lfs find on -1 stripe dir ========================"
+
# bug 2543 - update blocks count on client
test_66() {
COUNT=${COUNT:-8}
run_test 66 "update inode blocks count on client ==============="
test_67() {
+ [ ! -f sanity-sec.sh ] && skip "missing subtest sanity-sec.sh" && return
sh sanity-sec.sh
}
run_test 67 "security test ====================================="
# excercise swapping to lustre by adding a high priority swapfile entry
# and then consuming memory until it is used.
test_68() {
- [ "$UID" != 0 ] && echo "skipping $TESTNAME (must run as root)" && return
+ [ "$UID" != 0 ] && skip "must run as root" && return
grep -q obdfilter $LPROC/devices && \
- echo "skip $TESTNAME (local OST)" && return
+ skip "local OST" && return
find_loop_dev
dd if=/dev/zero of=$DIR/f68 bs=64k count=1024
# bug5265, obdfilter oa2dentry return -ENOENT
# #define OBD_FAIL_OST_ENOENT 0x217
test_69() {
- [ $(grep -c obdfilter $LPROC/devices) -eq 0 ] &&
- echo "skipping $TESTNAME for remote OST" && return
- [ ! -z "$USING_KRB5" ] &&
- echo "skipping $TESTNAME (gss with bulk security will triger oops. re-enable this after b10091 get fixed)" && return
+ [ $(grep -c obdfilter $LPROC/devices) -eq 0 ] && \
+ skip "skipping test for remote OST" && return
+ $GSS && skip "gss with bulk security will triger oops. re-enable this after b10091 get fixed" && return
f="$DIR/$tfile"
touch $f
if ! $DIRECTIO write ${f}.2 0 1; then
- echo "skipping $TESTNAME - O_DIRECT not implemented"
+ skip "O_DIRECT not implemented"
return 0
fi
run_test 69 "verify oa2dentry return -ENOENT doesn't LBUG ======"
test_71() {
- which dbench > /dev/null 2>&1 || echo "dbench not installed, skip this test" && return 0
+ which dbench > /dev/null 2>&1 || skip "dbench not installed, skip this test" && return 0
DBENCH_LIB=${DBENCH_LIB:-/usr/lib/dbench}
PATH=${DBENCH_LIB}:${PATH}
cp `which dbench` $DIR
test_72() { # bug 5695 - Test that on 2.6 remove_suid works properly
check_kernel_version 43 || return 0
- [ "$RUNAS_ID" = "$UID" ] && echo "skipping $TESTNAME" && return
+ [ "$RUNAS_ID" = "$UID" ] && skip "RUNAS_ID = UID = $UID -- skipping" && return
# We had better clear the $DIR to get enough space for dd
rm -rf $DIR/*
touch $DIR/f72
}
run_test 73 "multiple MDC requests (should not deadlock)"
-test_74() { # bug 6149, 6184
+test_74a() { # bug 6149, 6184
+ #define OBD_FAIL_LDLM_ENQUEUE_OLD_EXPORT 0x30e
+ #
+ # very important to OR with OBD_FAIL_ONCE (0x80000000) -- otherwise it
+ # will spin in a tight reconnection loop
+ touch $DIR/f74a
+ sysctl -w lustre.fail_loc=0x8000030e
+ # get any lock that won't be difficult - lookup works.
+ ls $DIR/f74a
+ sysctl -w lustre.fail_loc=0
+ true
+}
+run_test 74a "ldlm_enqueue freed-export error path, ls (shouldn't LBUG)"
+
+test_74b() { # bug 13310
#define OBD_FAIL_LDLM_ENQUEUE_OLD_EXPORT 0x30e
#
# very important to OR with OBD_FAIL_ONCE (0x80000000) -- otherwise it
# will spin in a tight reconnection loop
sysctl -w lustre.fail_loc=0x8000030e
- # get any lock
- touch $DIR/f74
+ # get a "difficult" lock
+ touch $DIR/f74b
sysctl -w lustre.fail_loc=0
true
}
-run_test 74 "ldlm_enqueue freed-export error path (shouldn't LBUG)"
+run_test 74b "ldlm_enqueue freed-export error path, touch (shouldn't LBUG)"
JOIN=${JOIN:-"lfs join"}
F75=$DIR/f75
test_76() { # bug 1443
DETH=$(grep deathrow /proc/kallsyms /proc/ksyms 2> /dev/null | wc -l)
- [ $DETH -eq 0 ] && echo "No _iget, skipping" && return 0
+ [ $DETH -eq 0 ] && skip "No _iget." && return 0
BEFORE_INODES=`num_inodes`
echo "before inodes: $BEFORE_INODES"
for i in `seq 1000`; do
run_test 77b "checksum error on client write ===================="
test_77c() { # bug 10889
- [ ! -f $DIR/f77b ] && log "requires 77b - skipping" && return
+ [ ! -f $DIR/f77b ] && skip "requires 77b - skipping" && return
cancel_lru_locks osc
#define OBD_FAIL_OSC_CHECKSUM_RECEIVE 0x408
sysctl -w lustre.fail_loc=0x80000408
run_test 77d "checksum error on OST direct write ==============="
test_77e() { # bug 10889
- [ ! -f $DIR/f77 ] && log "requires 77d - skipping" && return
+ [ ! -f $DIR/f77 ] && skip "requires 77d - skipping" && return
#define OBD_FAIL_OSC_CHECKSUM_RECEIVE 0x408
sysctl -w lustre.fail_loc=0x80000408
set_checksums 1
test_77g() { # bug 10889
[ $(grep -c obdfilter $LPROC/devices) -eq 0 ] && \
- echo "skipping $TESTNAME (remote OST)" && return
+ skip "remote OST" && return
[ ! -f $F77_TMP ] && setup_f77
#define OBD_FAIL_OST_CHECKSUM_RECEIVE 0x21a
sysctl -w lustre.fail_loc=0x8000021a
test_77h() { # bug 10889
[ $(grep -c obdfilter $LPROC/devices) -eq 0 ] && \
- echo "skipping $TESTNAME (remote OST)" && return
- [ ! -f $DIR/f77 ] && log "requires 77g - skipping" && return
+ skip "remote OST" && return
+ [ ! -f $DIR/f77 ] && skip "requires 77g - skipping" && return
cancel_lru_locks osc
#define OBD_FAIL_OST_CHECKSUM_SEND 0x21b
sysctl -w lustre.fail_loc=0x8000021b
}
run_test 78 "handle large O_DIRECT writes correctly ============"
+test_79() { # bug 12743
+ [ $(grep -c obdfilter $LPROC/devices) -eq 0 ] &&
+ skip "skipping test for remote OST" && return
+ BKTOTAL=`awk 'BEGIN{total=0}; {total+=$1}; END{print total}' \
+ $LPROC/obdfilter/*/kbytestotal`
+ BKFREE=`awk 'BEGIN{free=0}; {free+=$1}; END{print free}' \
+ $LPROC/obdfilter/*/kbytesfree`
+ BKAVAIL=`awk 'BEGIN{avail=0}; {avail+=$1}; END{print avail}' \
+ $LPROC/obdfilter/*/kbytesavail`
+ STRING=`df -P $MOUNT | tail -n 1 | awk '{print $2","$3","$4}'`
+ DFTOTAL=`echo $STRING | cut -d, -f1`
+ DFUSED=`echo $STRING | cut -d, -f2`
+ DFAVAIL=`echo $STRING | cut -d, -f3`
+ DFFREE=$(($DFTOTAL - $DFUSED))
+
+ ALLOWANCE=$((64 * $OSTCOUNT))
+
+ if [ $DFTOTAL -lt $(($BKTOTAL - $ALLOWANCE)) ] ||
+ [ $DFTOTAL -gt $(($BKTOTAL + $ALLOWANCE)) ] ; then
+ error "df total($DFTOTAL) mismatch OST total($BKTOTAL)"
+ fi
+ if [ $DFFREE -lt $(($BKFREE - $ALLOWANCE)) ] ||
+ [ $DFFREE -gt $(($BKFREE + $ALLOWANCE)) ] ; then
+ error "df free($DFFREE) mismatch OST free($BKFREE)"
+ fi
+ if [ $DFAVAIL -lt $(($BKAVAIL - $ALLOWANCE)) ] ||
+ [ $DFAVAIL -gt $(($BKAVAIL + $ALLOWANCE)) ] ; then
+ error "df avail($DFAVAIL) mismatch OST avail($BKAVAIL)"
+ fi
+}
+run_test 79 "df report consistency check ======================="
+
# on the LLNL clusters, runas will still pick up root's $TMP settings,
# which will not be writable for the runas user, and then you get a CVS
# error message with a corrupt path string (CVS bug) and panic.
}
cleanup_test102() {
- [ "SETUP_TEST102" = "YES" ] || return
+ [ "$SETUP_TEST102" = "yes" ] || return
trap 0
rm -f $TMP/f102.tar
rm -rf $DIR/$tdir
rm -f $testfile
touch $testfile
- [ "$UID" != 0 ] && echo "skipping $TESTNAME (must run as root)" && return
- [ -z "`grep xattr $LPROC/mdc/*-mdc-*/connect_flags`" ] && echo "skipping $TESTNAME (must have user_xattr)" && return
- [ -z "$(which setfattr 2>/dev/null)" ] && echo "skipping $TESTNAME (could not find setfattr)" && return
+ [ "$UID" != 0 ] && skip "must run as root" && return
+ [ -z "`grep xattr $LPROC/mdc/*-mdc-*/connect_flags`" ] && skip "must have user_xattr" && return
+
+ [ -z "$(which setfattr 2>/dev/null)" ] && skip "could not find setfattr" && return
echo "set/get xattr..."
setfattr -n trusted.name1 -v value1 $testfile || error
test_102b() {
# b10930: get/set/list trusted.lov xattr
echo "get/set/list trusted.lov xattr ..."
- [ "$OSTCOUNT" -lt "2" ] && echo "skipping 2-stripe test" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "skipping 2-stripe test" && return
local testfile=$DIR/$tfile
$SETSTRIPE $testfile 65536 1 2
getfattr -d -m "^trusted" $testfile 2> /dev/null | \
test_102c() {
# b10930: get/set/list trusted.lov xattr
echo "get/set/list trusted.lov xattr ..."
- [ "$OSTCOUNT" -lt "2" ] && echo "skipping 2-stripe test" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "skipping 2-stripe test" && return
mkdir -p $DIR/$tdir
chown $RUNAS_ID $DIR/$tdir
local testfile=$DIR/$tdir/$tfile
star --xhelp 2>&1 | grep -q nolustre
if [ $? -ne 0 ]
then
- echo "$TESTNUM being skipped because a lustre-aware star is not installed." && return
+ skip "being skipped because a lustre-aware star is not installed." && return
fi
- [ "$OSTCOUNT" -lt "4" ] && echo "skipping 4-stripe test" && return
+ [ "$OSTCOUNT" -lt "4" ] && skip "skipping 4-stripe test" && return
setup_test102
mkdir -p $DIR/d102d
star -x f=$TMP/f102.tar -C $DIR/d102d
star --xhelp 2>&1 | grep -q nolustre
if [ $? -ne 0 ]
then
- echo "$TESTNUM being skipped because a lustre-aware star is not installed." && return
+ skip "being skipped because a lustre-aware star is not installed." && return
fi
- [ "$OSTCOUNT" -lt "4" ] && echo "skipping 4-stripe test" && return
+ [ "$OSTCOUNT" -lt "4" ] && skip "skipping 4-stripe test" && return
setup_test102
mkdir -p $DIR/d102e
star -x -preserve-osts f=$TMP/f102.tar -C $DIR/d102e
star --xhelp 2>&1 | grep -q nolustre
if [ $? -ne 0 ]
then
- echo "$TESTNUM being skipped because a lustre-aware star is not installed." && return
+ skip "being skipped because a lustre-aware star is not installed." && return
fi
- [ "$OSTCOUNT" -lt "4" ] && echo "skipping 4-stripe test" && return
+ [ "$OSTCOUNT" -lt "4" ] && skip "skipping 4-stripe test" && return
setup_test102
mkdir -p $DIR/d102f
cd $DIR
star --xhelp 2>&1 | grep -q nolustre
if [ $? -ne 0 ]
then
- echo "$TESTNUM being skipped because a lustre-aware star is not installed." && return
+ skip "being skipped because a lustre-aware star is not installed." && return
fi
- [ "$OSTCOUNT" -lt "4" ] && echo "skipping 4-stripe test" && return
+ [ "$OSTCOUNT" -lt "4" ] && skip "skipping 4-stripe test" && return
setup_test102
mkdir -p $DIR/d102g
cd $DIR
}
test_103 () {
- [ "$UID" != 0 ] && echo "skipping $TESTNAME (must run as root)" && return
- [ -z "$(grep acl $LPROC/mdc/*-mdc-*/connect_flags)" ] && echo "skipping $TESTNAME (must have acl enabled)" && return
- [ -z "$(which setfacl 2>/dev/null)" ] && echo "skipping $TESTNAME (could not find setfacl)" && return
- [ ! -z "$USING_KRB5" ] && echo "skipping $TESTNAME (could not run under gss)" && return
+ [ "$UID" != 0 ] && skip "must run as root" && return
+ [ -z "$(grep acl $LPROC/mdc/*-mdc-*/connect_flags)" ] && skip "must have acl enabled" && return
+ [ -z "$(which setfacl 2>/dev/null)" ] && skip "could not find setfacl" && return
+ $GSS && skip "could not run under gss" && return
SAVE_UMASK=`umask`
umask 0022
test_115() {
OSTIO_pre=$(ps -e|grep ll_ost_io|awk '{print $4}'|sort -n|tail -1|\
cut -c11-20)
- [ -z "$OSTIO_pre" ] && echo "skipping $TESTNAME: no OSS threads" && \
+ [ -z "$OSTIO_pre" ] && skip "no OSS threads" && \
return
echo "Starting with $OSTIO_pre threads"
}
test_116() {
- [ "$OSTCOUNT" -lt "2" ] && echo "not enough OSTs" && return
- [ $(grep -c obdfilter $LPROC/devices) -eq 0 ] &&
- echo "remote MDS, skipping test" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "$OSTCOUNT < 2 OSTs" && return
+ remote_mds && skip "remote MDS" && return
echo -n "Free space priority "
cat $LPROC/lov/*-clilov-*/qos_prio_free
DELAY=$(cat $LPROC/lov/*-clilov-*/qos_maxage | head -1 | awk '{print $1}')
declare -a AVAIL
free_min_max
- [ $MINV -gt 960000 ] && echo "too much free space in OST$MINI, skip" &&\
+ [ $MINV -gt 960000 ] && skip "too much free space in OST$MINI, skip" &&\
return
# generate uneven OSTs
test_119b() # bug 11737
{
- [ "$OSTCOUNT" -lt "2" ] && echo "skipping 2-stripe test" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip "skipping 2-stripe test" && return
lfs setstripe $DIR/$tfile 0 -1 2
dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=1 || error "dd failed"
}
run_test 119b "Sparse directIO read must return actual read amount"
+LDLM_POOL_CTL_RECALC=1
+LDLM_POOL_CTL_SHRINK=2
+
+disable_pool_recalc() {
+ for NSD in $LPROC/ldlm/namespaces/*$1*; do
+ if test -f $NSD/pool/control; then
+ CONTROL=`cat $NSD/pool/control`
+ CONTROL=$((CONTROL & ~LDLM_POOL_CTL_RECALC))
+ echo "$CONTROL" > $NSD/pool/control
+ fi
+ done
+}
+
+enable_pool_recalc() {
+ for NSD in $LPROC/ldlm/namespaces/*$1*; do
+ if test -f $NSD/pool/control; then
+ CONTROL=`cat $NSD/pool/control`
+ CONTROL=$((CONTROL | LDLM_POOL_CTL_RECALC))
+ echo "$CONTROL" > $NSD/pool/control
+ fi
+ done
+}
+
+disable_pool_shrink() {
+ for NSD in $LPROC/ldlm/namespaces/*$1*; do
+ if test -f $NSD/pool/control; then
+ CONTROL=`cat $NSD/pool/control`
+ CONTROL=$((CONTROL & ~LDLM_POOL_CTL_SHRINK))
+ echo "$CONTROL" > $NSD/pool/control
+ fi
+ done
+}
+
+enable_pool_shrink() {
+ for NSD in $LPROC/ldlm/namespaces/*$1*; do
+ if test -f $NSD/pool/control; then
+ CONTROL=`cat $NSD/pool/control`
+ CONTROL=$((CONTROL | LDLM_POOL_CTL_SHRINK))
+ echo "$CONTROL" > $NSD/pool/control
+ fi
+ done
+}
+
+disable_pool() {
+ disable_pool_shrink $1
+ disable_pool_recalc $1
+}
+
+enable_pool() {
+ enable_pool_shrink $1
+ enable_pool_recalc $1
+}
+
+lru_resize_enable()
+{
+ enable_pool osc
+ enable_pool "filter-$FSNAME"
+ enable_pool mdc
+ enable_pool "mds-$FSNAME"
+}
+
+lru_resize_disable()
+{
+ disable_pool osc
+ disable_pool "filter-$FSNAME"
+ disable_pool mdc
+ disable_pool "mds-$FSNAME"
+}
+
+test_120a() {
+ [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no early lock cancel on server" && return 0
+ lru_resize_disable
+ mkdir $DIR/$tdir
+ cancel_lru_locks mdc
+ stat $DIR/$tdir > /dev/null
+ can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk1=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ mkdir $DIR/$tdir/d1
+ can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ [ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
+ [ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
+ lru_resize_enable
+}
+run_test 120a "Early Lock Cancel: mkdir test"
+
+test_120b() {
+ [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no early lock cancel on server" && return 0
+ lru_resize_disable
+ mkdir $DIR/$tdir
+ cancel_lru_locks mdc
+ stat $DIR/$tdir > /dev/null
+ can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk1=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ touch $DIR/$tdir/f1
+ blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ [ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
+ [ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
+ lru_resize_enable
+}
+run_test 120b "Early Lock Cancel: create test"
+
+test_120c() {
+ [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no early lock cancel on server" && return 0
+ lru_resize_disable
+ mkdir -p $DIR/$tdir/d1 $DIR/$tdir/d2
+ touch $DIR/$tdir/d1/f1
+ cancel_lru_locks mdc
+ stat $DIR/$tdir/d1 $DIR/$tdir/d2 $DIR/$tdir/d1/f1 > /dev/null
+ can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk1=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ ln $DIR/$tdir/d1/f1 $DIR/$tdir/d2/f2
+ can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ [ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
+ [ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
+ lru_resize_enable
+}
+run_test 120c "Early Lock Cancel: link test"
+
+test_120d() {
+ [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no early lock cancel on server" && return 0
+ lru_resize_disable
+ touch $DIR/$tdir
+ cancel_lru_locks mdc
+ stat $DIR/$tdir > /dev/null
+ can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk1=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ chmod a+x $DIR/$tdir
+ can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ [ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
+ [ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
+ lru_resize_enable
+}
+run_test 120d "Early Lock Cancel: setattr test"
+
+test_120e() {
+ [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no early lock cancel on server" && return 0
+ lru_resize_disable
+ mkdir $DIR/$tdir
+ dd if=/dev/zero of=$DIR/$tdir/f1 count=1
+ cancel_lru_locks mdc
+ cancel_lru_locks osc
+ dd if=$DIR/$tdir/f1 of=/dev/null
+ stat $DIR/$tdir $DIR/$tdir/f1 > /dev/null
+ can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk1=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ unlink $DIR/$tdir/f1
+ can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ [ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
+ [ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
+ lru_resize_enable
+}
+run_test 120e "Early Lock Cancel: unlink test"
+
+test_120f() {
+ [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no early lock cancel on server" && return 0
+ lru_resize_disable
+ mkdir -p $DIR/$tdir/d1 $DIR/$tdir/d2
+ dd if=/dev/zero of=$DIR/$tdir/d1/f1 count=1
+ dd if=/dev/zero of=$DIR/$tdir/d2/f2 count=1
+ cancel_lru_locks mdc
+ cancel_lru_locks osc
+ dd if=$DIR/$tdir/d1/f1 of=/dev/null
+ dd if=$DIR/$tdir/d2/f2 of=/dev/null
+ stat $DIR/$tdir/d1 $DIR/$tdir/d2 $DIR/$tdir/d1/f1 $DIR/$tdir/d2/f2 > /dev/null
+ can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk1=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ mv $DIR/$tdir/d1/f1 $DIR/$tdir/d2/f2
+ can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ [ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
+ [ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
+ lru_resize_enable
+}
+run_test 120f "Early Lock Cancel: rename test"
+
+test_120g() {
+ [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no early lock cancel on server" && return 0
+ lru_resize_disable
+ count=10000
+ echo create $count files
+ mkdir $DIR/$tdir
+ cancel_lru_locks mdc
+ cancel_lru_locks osc
+ t0=`date +%s`
+
+ can0=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk0=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ createmany -o $DIR/$tdir/f $count
+ sync
+ can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk1=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ t1=`date +%s`
+ echo total: $((can1-can0)) cancels, $((blk1-blk0)) blockings
+ echo rm $count files
+ rm -r $DIR/$tdir
+ sync
+ can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
+ blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
+ t2=`date +%s`
+ echo total: $count removes in $((t2-t1))
+ echo total: $((can2-can1)) cancels, $((blk2-blk1)) blockings
+ sleep 2
+ # wait for commitment of removal
+ lru_resize_enable
+}
+run_test 120g "Early Lock Cancel: performance test"
+
+test_121() { #bug #10589
+ rm -rf $DIR/$tfile
+ writes=`dd if=/dev/zero of=$DIR/$tfile count=1 2>&1 | awk 'BEGIN { FS="+" } /out/ {print $1}'`
+#define OBD_FAIL_LDLM_CANCEL_RACE 0x310
+ sysctl -w lustre.fail_loc=0x310
+ cancel_lru_locks osc > /dev/null
+ reads=`dd if=$DIR/$tfile of=/dev/null 2>&1 | awk 'BEGIN { FS="+" } /in/ {print $1}'`
+ sysctl -w lustre.fail_loc=0
+ [ $reads -eq $writes ] || error "read" $reads "blocks, must be" $writes
+}
+run_test 121 "read cancel race ========="
+
+test_124() {
+ [ -z "`grep lru_resize $LPROC/mdc/*/connect_flags`" ] && \
+ skip "no lru resize on server" && return 0
+ cancel_lru_locks mdc
+ lru_resize_enable
+ NSDIR=`find $LPROC/ldlm/namespaces | grep mdc | head -1`
+
+ # we want to test main pool functionality, that is cancel based on SLV
+ # this is why shrinkers are disabled
+ disable_pool_shrink "mds-$FSNAME"
+ disable_pool_shrink mdc
+
+ NR=2000
+ mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
+
+ LRU_SIZE=`cat $NSDIR/lru_size`
+
+ # use touch to produce $NR new locks
+ log "create $NR files at $DIR/$tdir"
+ for ((i=0;i<$NR;i++)); do touch $DIR/$tdir/f$i; done
+
+ LRU_SIZE_B=`cat $NSDIR/lru_size`
+ if test $LRU_SIZE -ge $LRU_SIZE_B; then
+ skip "No cached locks created!"
+ cat $NSDIR/pool/state
+ return 0
+ fi
+ LRU_SIZE_B=$((LRU_SIZE_B-LRU_SIZE))
+ log "created $LRU_SIZE_B lock(s)"
+
+ # we want to sleep 30s to not make test too long
+ SLEEP=30
+ SLEEP_ADD=10
+
+ # we know that lru resize allows one client to hold $LIMIT locks for 10h
+ MAX_HRS=10
+
+ # get the pool limit
+ LIMIT=`cat $NSDIR/pool/limit`
+
+ # calculate lock volume factor taking into account sleep and data set
+ # use $LRU_SIZE_B here to take into account real number of locks created
+ # in the case of CMD, LRU_SIZE_B != $NR in most of cases
+ LVF=$(($LIMIT * $MAX_HRS * 60 * 60 / $LRU_SIZE_B / $SLEEP))
+
+ log "make client drop locks $LVF times faster so that ${SLEEP}s is enough to cancel $LRU_SIZE_B lock(s)"
+ OLD_LVF=`cat $NSDIR/pool/lock_volume_factor`
+ echo "$LVF" > $NSDIR/pool/lock_volume_factor
+ log "sleep for "$((SLEEP+SLEEP_ADD))"s"
+ sleep $((SLEEP+SLEEP_ADD))
+ echo "$OLD_LVF" > $NSDIR/pool/lock_volume_factor
+ LRU_SIZE_A=`cat $NSDIR/lru_size`
+
+ [ $LRU_SIZE_B -ge $LRU_SIZE_A ] || {
+ error "No locks dropped in "$((SLEEP+SLEEP_ADD))"s. LRU size: $LRU_SIZE_A"
+ lru_resize_enable
+ unlinkmany $DIR/$tdir/f $NR
+ return
+ }
+
+ log "Dropped "$((LRU_SIZE_B-LRU_SIZE_A))" locks in "$((SLEEP+SLEEP_ADD))"s"
+ lru_resize_enable
+ log "unlink $NR files at $DIR/$tdir"
+ unlinkmany $DIR/$tdir/f $NR
+}
+run_test 124 "lru resize ======================================="
+
+test_125() { # 13358
+ mkdir -p $DIR/d125 || error "mkdir failed"
+ $SETSTRIPE $DIR/d125 65536 -1 -1 || error "setstripe failed"
+ setfacl -R -m u:bin:rwx $DIR/d125 || error "setfacl $DIR/d125 failed"
+ ls -ld $DIR/d125 || error "cannot access $DIR/d125"
+}
+run_test 125 "don't return EPROTO when a dir has a non-default striping and ACLs"
+
TMPDIR=$OLDTMPDIR
TMP=$OLDTMP
HOME=$OLDHOME
log "cleanup: ======================================================"
-if [ "`mount | grep $MOUNT`" ]; then
- rm -rf $DIR/[Rdfs][1-9]*
+check_and_cleanup_lustre
+if [ "$I_MOUNTED" != "yes" ]; then
+ sysctl -w lnet.debug="$OLDDEBUG" 2> /dev/null || true
fi
-if [ "$I_MOUNTED" = "yes" ]; then
- cleanupall -f || error "cleanup failed"
-fi
-
echo '=========================== finished ==============================='
-[ -f "$SANITYLOG" ] && cat $SANITYLOG && exit 1 || true
+[ -f "$SANITYLOG" ] && cat $SANITYLOG && grep -q FAIL $SANITYLOG && exit 1 || true
+echo "$0: completed"