set -e
ONLY=${ONLY:-"$*"}
-# bug number for skipped test: 13297 2108 9789 3637 9789 3561 12622 12653 12653 5188 16260 19742
-ALWAYS_EXCEPT=" 27u 42a 42b 42c 42d 45 51d 65a 65e 68b $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"}
+# bug number for skipped test: 13297 2108 9789 3637 9789 3561 12622 5188
+ALWAYS_EXCEPT=" 27u 42a 42b 42c 42d 45 51d 68b $SANITY_EXCEPT"
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
# Tests that fail on uml
test_60a() {
[ ! -f run-llog.sh ] && skip_env "missing subtest run-llog.sh" && return
log "$TEST60_HEAD - from kernel mode"
- sh run-llog.sh
+ do_facet mgs sh run-llog.sh
}
run_test 60a "llog sanity tests run from kernel module =========="
# test case for lloop driver, basic function
test_68a() {
[ "$UID" != 0 ] && skip_env "must run as root" && return
+ llite_lloop_enabled || \
+ { skip_env "llite_lloop module disabled" && return; }
trap cleanup_68 EXIT
error "elapsed for 1M@1T = $DIFF"
fi
true
- rm -f $DIR/$tfile
+ rm -f $DIR/$tfile
}
run_test 80 "Page eviction is equally fast at high offsets too ===="
+test_81a() { # LU-456
+ # define OBD_FAIL_OST_MAPBLK_ENOSPC 0x228
+ # MUST OR with the OBD_FAIL_ONCE (0x80000000)
+ do_facet ost0 lctl set_param fail_loc=0x80000228
+
+ # write should trigger a retry and success
+ $SETSTRIPE -i 0 -c 1 $DIR/$tfile
+ multiop $DIR/$tfile oO_CREAT:O_RDWR:O_SYNC:w4096c
+ RC=$?
+ if [ $RC -ne 0 ] ; then
+ error "write should success, but failed for $RC"
+ fi
+}
+run_test 81a "OST should retry write when get -ENOSPC ==============="
+
+test_81b() { # LU-456
+ # define OBD_FAIL_OST_MAPBLK_ENOSPC 0x228
+ # Don't OR with the OBD_FAIL_ONCE (0x80000000)
+ do_facet ost0 lctl set_param fail_loc=0x228
+
+ # write should retry several times and return -ENOSPC finally
+ $SETSTRIPE -i 0 -c 1 $DIR/$tfile
+ multiop $DIR/$tfile oO_CREAT:O_RDWR:O_SYNC:w4096c
+ RC=$?
+ ENOSPC=28
+ if [ $RC -ne $ENOSPC ] ; then
+ error "dd should fail for -ENOSPC, but succeed."
+ fi
+}
+run_test 81b "OST should return -ENOSPC when retry still fails ======="
+
+
test_99a() {
[ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && \
return
}
run_test 126 "check that the fsgid provided by the client is taken into account"
-test_127() { # bug 15521
+test_127a() { # bug 15521
$SETSTRIPE -i 0 -c 1 $DIR/$tfile || error "setstripe failed"
$LCTL set_param osc.*.stats=0
FSIZE=$((2048 * 1024))
[ "$read_bytes" != 0 ] || error "no read done"
[ "$write_bytes" != 0 ] || error "no write done"
}
-run_test 127 "verify the client stats are sane"
+run_test 127a "verify the client stats are sane"
+
+test_127b() { # bug LU-333
+ $LCTL set_param llite.*.stats=0
+ FSIZE=65536 # sized fixed to match PAGE_SIZE for most clients
+ # perform 2 reads and writes so MAX is different from SUM.
+ dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
+ dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
+ cancel_lru_locks osc
+ dd if=$DIR/$tfile of=/dev/null bs=$FSIZE count=1
+ dd if=$DIR/$tfile of=/dev/null bs=$FSIZE count=1
+
+ $LCTL get_param llite.*.stats | grep samples > $TMP/${tfile}.tmp
+ while read NAME COUNT SAMP UNIT MIN MAX SUM SUMSQ; do
+ echo "got $COUNT $NAME"
+ eval $NAME=$COUNT || error "Wrong proc format"
+
+ case $NAME in
+ read_bytes)
+ [ $COUNT -ne 2 ] && error "count is not 2: $COUNT"
+ [ $MIN -ne $FSIZE ] && error "min is not $FSIZE: $MIN"
+ [ $MAX -ne $FSIZE ] && error "max is incorrect: $MAX"
+ [ $SUM -ne $((FSIZE * 2)) ] && error "sum is wrong: $SUM"
+ ;;
+ write_bytes)
+ [ $COUNT -ne 2 ] && error "count is not 2: $COUNT"
+ [ $MIN -ne $FSIZE ] && error "min is not $FSIZE: $MIN"
+ [ $MAX -ne $FSIZE ] && error "max is incorrect: $MAX"
+ [ $SUM -ne $((FSIZE * 2)) ] && error "sum is wrong: $SUM"
+ ;;
+ *) ;;
+ esac
+ done < $TMP/${tfile}.tmp
+
+ #check that we actually got some stats
+ [ "$read_bytes" ] || error "Missing read_bytes stats"
+ [ "$write_bytes" ] || error "Missing write_bytes stats"
+ [ "$read_bytes" != 0 ] || error "no read done"
+ [ "$write_bytes" != 0 ] || error "no write done"
+}
+run_test 127b "verify the llite client stats are sane"
test_128() { # bug 15212
touch $DIR/$tfile
}
run_test 132 "som avoids glimpse rpc"
+check_stats() {
+ local res
+ local count
+ case $1 in
+ $SINGLEMDS) res=`do_facet $SINGLEMDS $LCTL get_param mdt.$FSNAME-MDT0000.md_stats | grep "$2"`
+ ;;
+ ost) res=`do_facet ost $LCTL get_param obdfilter.$FSNAME-OST0000.stats | grep "$2"`
+ ;;
+ *) error "Wrong argument $1" ;;
+ esac
+ echo $res
+ count=`echo $res | awk '{print $2}'`
+ [ -z "$res" ] && error "The counter for $2 on $1 was not incremented"
+ # if the argument $3 is zero, it means any stat increment is ok.
+ if [ $3 -gt 0 ] ; then
+ [ $count -ne $3 ] && error "The $2 counter on $1 is wrong - expected $3"
+ fi
+}
+
+test_133a() {
+ local testdir=$DIR/${tdir}/stats_testdir
+ mkdir -p $DIR/${tdir}
+
+ # clear stats.
+ do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
+ do_facet ost $LCTL set_param obdfilter.*.stats=clear
+
+ # verify mdt stats first.
+ mkdir ${testdir} || error "mkdir failed"
+ check_stats $SINGLEMDS "mkdir" 1
+ touch ${testdir}/${tfile} || "touch failed"
+ check_stats $SINGLEMDS "open" 1
+ check_stats $SINGLEMDS "close" 1
+ mknod ${testdir}/${tfile}-pipe p || "mknod failed"
+ check_stats $SINGLEMDS "mknod" 1
+ rm -f ${testdir}/${tfile}-pipe || "pipe remove failed"
+ check_stats $SINGLEMDS "unlink" 1
+ rm -f ${testdir}/${tfile} || error "file remove failed"
+ check_stats $SINGLEMDS "unlink" 2
+
+ # remove working dir and check mdt stats again.
+ rmdir ${testdir} || error "rmdir failed"
+ check_stats $SINGLEMDS "rmdir" 1
+
+ rm -rf $DIR/${tdir}
+}
+run_test 133a "Verifying MDT stats ========================================"
+
+test_133b() {
+ local testdir=$DIR/${tdir}/stats_testdir
+ mkdir -p ${testdir} || error "mkdir failed"
+ touch ${testdir}/${tfile} || "touch failed"
+ cancel_lru_locks mdc
+
+ # clear stats.
+ do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
+ do_facet ost $LCTL set_param obdfilter.*.stats=clear
+
+ # extra mdt stats verification.
+ chmod 444 ${testdir}/${tfile} || error "chmod failed"
+ check_stats $SINGLEMDS "setattr" 1
+ $LFS df || error "lfs failed"
+ check_stats $SINGLEMDS "statfs" 1
+
+ rm -rf $DIR/${tdir}
+}
+run_test 133b "Verifying extra MDT stats =================================="
+
+test_133c() {
+ local testdir=$DIR/${tdir}/stats_testdir
+ mkdir -p ${testdir} || error "mkdir failed"
+
+ # verify obdfilter stats.
+ $LFS setstripe -c 1 -o 0 ${testdir}/${tfile}
+ sync
+ cancel_lru_locks osc
+
+ # clear stats.
+ do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
+ do_facet ost $LCTL set_param obdfilter.*.stats=clear
+
+ dd if=/dev/zero of=${testdir}/${tfile} conv=notrunc bs=1024k count=1 || error "dd failed"
+ sync
+ cancel_lru_locks osc
+ check_stats ost "write" 1
+
+ dd if=${testdir}/${tfile} of=/dev/null bs=1k count=1 || error "dd failed"
+ check_stats ost "read" 1
+
+ > ${testdir}/${tfile} || error "truncate failed"
+ check_stats ost "punch" 1
+
+ rm -f ${testdir}/${tfile} || error "file remove failed"
+ check_stats ost "destroy" 1
+
+ rm -rf $DIR/${tdir}
+}
+run_test 133c "Verifying OST stats ========================================"
+
test_140() { #bug-17379
mkdir -p $DIR/$tdir || error "Creating dir $DIR/$tdir"
cd $DIR/$tdir || error "Changing to $DIR/$tdir"
}
run_test 218 "parallel read and truncate should not deadlock ======================="
+test_219() {
+ # write one partial page
+ dd if=/dev/zero of=$DIR/$tfile bs=1024 count=1
+ # set no grant so vvp_io_commit_write will do sync write
+ $LCTL set_param fail_loc=0x411
+ # write a full page at the end of file
+ dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 seek=1 conv=notrunc
+
+ $LCTL set_param fail_loc=0
+ dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 seek=3
+ $LCTL set_param fail_loc=0x411
+ dd if=/dev/zero of=$DIR/$tfile bs=1024 count=1 seek=2 conv=notrunc
+}
+run_test 219 "LU-394: Write partial won't cause uncontiguous pages vec at LND"
+
#
# tests that do cleanup/setup should be run at the end
#