set -e
ONLY=${ONLY:-"$*"}
-# bug number for skipped test:
-ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-""}
+# bug number for skipped test: 2108
+RENAME_TESTS="24a 24b 24c 24d 24e 24f 24g 24h 24i 24j 24k 24l 24m 24n 24o 48a 48d"
+ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"$RENAME_TESTS 58"}
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
+case `uname -r` in
+2.6.*) ALWAYS_EXCEPT="$ALWAYS_EXCEPT 54c 55" # bug 3117
+esac
[ "$ALWAYS_EXCEPT$EXCEPT" ] && echo "Skipping tests: $ALWAYS_EXCEPT $EXCEPT"
export PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
TMP=${TMP:-/tmp}
+FSTYPE=${FSTYPE:-ext3}
CHECKSTAT=${CHECKSTAT:-"checkstat -v"}
CREATETEST=${CREATETEST:-createtest}
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=/proc/fs/lustre/kernel_version
+ WANT_VER=$1
+ [ ! -f $VERSION_FILE ] && echo "can't find kernel version" && return 1
+ GOT_VER=`cat $VERSION_FILE`
+ [ $GOT_VER -ge $WANT_VER ] && return 0
+ log "test needs at least kernel version $WANT_VER, running $GOT_VER"
+ return 1
+}
+
run_one() {
if ! mount | grep -q $DIR; then
$START
fi
+ echo -1 >/proc/sys/portals/debug
log "== test $1: $2"
export TESTNAME=test_$1
test_$1 || error "test_$1: exit with rc=$?"
echo preparing for tests involving mounts
EXT2_DEV=${EXT2_DEV:-/tmp/SANITY.LOOP}
touch $EXT2_DEV
-mke2fs -F $EXT2_DEV 1000 > /dev/null
-
-EXT3_DEV=${EXT3_DEV:-/tmp/SANITY_EXT3_DEV.LOOP}
-touch $EXT3_DEV
-mkfs.ext3 -F $EXT3_DEV 10000 > /dev/null
+mke2fs -j -F $EXT2_DEV 8000 > /dev/null
test_0() {
touch $DIR/f
}
run_test 24n "Statting the old file after renameing (Posix rename 2)"
+test_24o() {
+ check_kernel_version 37 || return 0
+ rename_many -s 3287 -v -n 10 $DIR
+}
+run_test 24o "rename of files during htree split ==============="
+
test_25a() {
echo '== symlink sanity ============================================='
mkdir $DIR/d25
run_test 31d "remove of open directory ========================="
test_31e() {
+ check_kernel_version 34 || return 0
openfilleddirunlink $DIR/d31e || error
}
-run_test 31e "remove of open non-removable directory ========================="
+run_test 31e "remove of open non-empty directory ==============="
test_32a() {
echo "== more mountpoints and symlinks ================="
run_test 36d "non-root OST utime check (open, utime) ==========="
test_36e() {
- [ $RUNAS_ID -eq $UID ] && return
+ [ $RUNAS_ID -eq $UID ] && echo "skipping test 36e" && return
[ ! -d $DIR/d36 ] && mkdir $DIR/d36
touch $DIR/d36/f36e
$RUNAS utime $DIR/d36/f36e && error "utime worked, want failure" || true
test_44() {
[ "$OSTCOUNT" -lt "2" ] && echo "skipping 2-stripe test" && return
- dd if=/dev/zero of=$DIR/f1 bs=4k count=1 seek=127
+ dd if=/dev/zero of=$DIR/f1 bs=4k count=1 seek=1023
dd if=$DIR/f1 bs=4k count=1
}
run_test 44 "zero length read from a sparse stripe ============="
getconf PAGE_SIZE
}
-# in a 2 stripe file (lov.sh), page 63 maps to page 31 in its object. this
+# in a 2 stripe file (lov.sh), page 1023 maps to page 511 in its object. this
# test tickles a bug where re-dirtying a page was failing to be mapped to the
-# objects offset and an assert hit when an rpc was built with 63's mapped
-# offset 31 and 31's raw 31 offset. it also found general redirtying bugs.
+# objects offset and an assert hit when an rpc was built with 1023's mapped
+# offset 511 and 511's raw 511 offset. it also found general redirtying bugs.
test_46() {
f="$DIR/f46"
stop_writeback
sync
- dd if=/dev/zero of=$f bs=`page_size` seek=31 count=1
+ dd if=/dev/zero of=$f bs=`page_size` seek=511 count=1
sync
- dd conv=notrunc if=/dev/zero of=$f bs=`page_size` seek=63 count=1
- dd conv=notrunc if=/dev/zero of=$f bs=`page_size` seek=31 count=1
+ dd conv=notrunc if=/dev/zero of=$f bs=`page_size` seek=1023 count=1
+ dd conv=notrunc if=/dev/zero of=$f bs=`page_size` seek=511 count=1
sync
start_writeback
}
run_test 47 "Device nodes check ================================"
test_48a() { # bug 2399
- mkdir $DIR/d48a
+ check_kernel_version 34 || return 0
+ mkdir -p $DIR/d48a
cd $DIR/d48a
mv $DIR/d48a $DIR/d48.new || error "move directory failed"
mkdir $DIR/d48a || error "recreate directory failed"
mkdir . && error "'mkdir .' worked after recreating cwd"
rmdir . && error "'rmdir .' worked after recreating cwd"
ln -s . baz || error "'ln -s .' failed after recreating cwd"
+ cd .. || error "'cd ..' failed after recreating cwd"
}
run_test 48a "Access renamed working dir (should return errors)="
test_48b() { # bug 2399
- mkdir $DIR/d48b
+ check_kernel_version 34 || return 0
+ mkdir -p $DIR/d48b
cd $DIR/d48b
rmdir $DIR/d48b || error "remove cwd $DIR/d48b failed"
touch foo && error "'touch foo' worked after removing cwd"
mkdir foo && error "'mkdir foo' worked after removing cwd"
ls . && error "'ls .' worked after removing cwd"
ls .. || error "'ls ..' failed after removing cwd"
- cd . && error "'cd .' worked after recreate cwd"
+ 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" || true
+ #cd .. || error "'cd ..' failed after removing cwd"
}
run_test 48b "Access removed working dir (should return errors)="
+test_48c() { # bug 2350
+ check_kernel_version 36 || return 0
+ #sysctl -w portals.debug=-1
+ #set -vx
+ mkdir -p $DIR/d48c/dir
+ cd $DIR/d48c/dir
+ $TRACE rmdir $DIR/d48c/dir || error "remove cwd $DIR/d48c/dir failed"
+ $TRACE touch foo && error "'touch foo' worked after removing cwd"
+ $TRACE mkdir foo && error "'mkdir foo' worked after removing cwd"
+ $TRACE ls . && error "'ls .' worked after removing cwd"
+ $TRACE ls .. || error "'ls ..' failed after removing cwd"
+ $TRACE cd . && error "'cd .' worked after recreate 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" ||true
+ $TRACE cd .. || echo "'cd ..' failed after removing cwd (`pwd)`"
+}
+run_test 48c "Access removed working subdir (should return errors)"
+
+test_48d() { # bug 2350
+ check_kernel_version 36 || return 0
+ #sysctl -w portals.debug=-1
+ #set -vx
+ mkdir -p $DIR/d48d/dir
+ cd $DIR/d48d/dir
+ pwd
+ ls .
+ $TRACE rm -vr $DIR/d48d || error "remove cwd+parent $DIR/d48d failed"
+ $TRACE touch foo && error "'touch foo' worked after removing cwd"
+ $TRACE mkdir foo && error "'mkdir foo' worked after removing cwd"
+ $TRACE ls . && error "'ls .' worked after removing cwd"
+ $TRACE ls .. && echo "'ls ..' worked after removing cwd" # bug 3415
+ $TRACE cd . && error "'cd .' worked after recreate 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" ||true
+ $TRACE cd .. && error "'cd ..' worked after removing cwd" || true
+}
+run_test 48d "Access removed parent subdir (should return errors)"
+
test_50() {
# bug 1485
mkdir $DIR/d50
test_55() {
rm -rf $DIR/d55
mkdir $DIR/d55
- mount -t ext3 -o loop,iopen $EXT3_DEV $DIR/d55 || error
+ mount -t $FSTYPE -o loop,iopen $EXT2_DEV $DIR/d55 || error
touch $DIR/d55/foo
$IOPENTEST1 $DIR/d55/foo $DIR/d55 || error
$IOPENTEST2 $DIR/d55 || error
- echo "check for $EXT3_DEV. Please wait..."
+ echo "check for $EXT2_DEV. Please wait..."
rm -rf $DIR/d55/*
umount $DIR/d55 || error
}
# bug 2319 - oig_wait() interrupted causes crash because of invalid waitq.
test_63() {
- MAX_DIRTY_MB=`cat /proc/fs/lustre/osc/*/max_dirty_mb | head -1`
+ MAX_DIRTY_MB=`cat /proc/fs/lustre/osc/*/max_dirty_mb | head -n 1`
for i in /proc/fs/lustre/osc/*/max_dirty_mb ; do
echo 0 > $i
done
}
run_test 66 "update inode blocks count on client ==============="
+test_67() { # bug 3285 - supplementary group fails on MDS, passes on client
+ [ "$RUNAS_ID" = "$UID" ] && echo "skipping test 67" && return
+ check_kernel_version 35 || return 0
+ mkdir $DIR/d67
+ chmod 771 $DIR/d67
+ chgrp $RUNAS_ID $DIR/d67
+ $RUNAS -g $((RUNAS_ID + 1)) -G1,2,$RUNAS_ID ls $DIR/d67 && error || true
+}
+run_test 67 "supplementary group failure (should return error) ="
+
# 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.