test_15() { # bug 974 - ENOSPC
echo "PATH=$PATH"
sh oos2.sh $MOUNT1 $MOUNT2
+ wait_delete_completed
grant_error=`dmesg | grep "> available"`
[ -z "$grant_error" ] || error "$grant_error"
}
run_test 15 "test out-of-space with multiple writers ==========="
+COUNT=${COUNT:-2500}
+# The FSXNUM reduction for ZFS is needed until ORI-487 is fixed.
+# We don't want to skip it entirely, but ZFS is VERY slow and cannot
+# pass a 2500 operation dual-mount run within the time limit.
+if [ "$OSTFSTYPE" = "zfs" ]; then
+ FSXNUM=$((COUNT / 5))
+ FSXP=1
+elif [ "$SLOW" = "yes" ]; then
+ FSXNUM=$((COUNT * 5))
+ FSXP=500
+else
+ FSXNUM=$COUNT
+ FSXP=100
+fi
+
test_16() {
- rm -f $MOUNT1/fsxfile
- lfs setstripe $MOUNT1/fsxfile -c -1 # b=10919
- fsx -c 50 -p 100 -N 2500 -l $((SIZE * 256)) -S 0 $MOUNT1/fsxfile $MOUNT2/fsxfile
+ local file1=$DIR1/$tfile
+ local file2=$DIR2/$tfile
+
+ # to allocate grant because it may run out due to test_15.
+ lfs setstripe -c -1 $file1
+ dd if=/dev/zero of=$file1 bs=$STRIPE_BYTES count=$OSTCOUNT oflag=sync
+ dd if=/dev/zero of=$file2 bs=$STRIPE_BYTES count=$OSTCOUNT oflag=sync
+ rm -f $file1
+
+ lfs setstripe -c -1 $file1 # b=10919
+ fsx -c 50 -p $FSXP -N $FSXNUM -l $((SIZE * 256)) -S 0 $file1 $file2
}
-run_test 16 "2500 iterations of dual-mount fsx ================="
+run_test 16 "$FSXNUM iterations of dual-mount fsx"
test_17() { # bug 3513, 3667
remote_ost_nodsh && skip "remote OST with nodsh" && return
run_test 18 "mmap sanity check ================================="
test_19() { # bug3811
- [ -d /proc/fs/lustre/obdfilter ] || return 0
+ local node=$(facet_active_host ost1)
- MAX=`lctl get_param -n obdfilter.*.readcache_max_filesize | head -n 1`
- lctl set_param -n obdfilter.*OST*.readcache_max_filesize=4096
- dd if=/dev/urandom of=$TMP/f19b bs=512k count=32
- SUM=`cksum $TMP/f19b | cut -d" " -f 1,2`
- cp $TMP/f19b $DIR1/f19b
+ # check whether obdfilter is cache capable at all
+ if ! get_obdfilter_param $node '' read_cache_enable >/dev/null; then
+ echo "not cache-capable obdfilter"
+ return 0
+ fi
+
+ local MAX=$(get_obdfilter_param $node '' readcache_max_filesize | \
+ head -n 1)
+ set_obdfilter_param $node '' readcache_max_filesize 4096
+ dd if=/dev/urandom of=$TMP/$tfile bs=512k count=32
+ local SUM=$(cksum $TMP/$tfile | cut -d" " -f 1,2)
+ cp $TMP/$tfile $DIR1/$tfile
for i in `seq 1 20`; do
- [ $((i % 5)) -eq 0 ] && log "test_18 loop $i"
+ [ $((i % 5)) -eq 0 ] && log "$testname loop $i"
cancel_lru_locks osc > /dev/null
- cksum $DIR1/f19b | cut -d" " -f 1,2 > $TMP/sum1 & \
- cksum $DIR2/f19b | cut -d" " -f 1,2 > $TMP/sum2
+ cksum $DIR1/$tfile | cut -d" " -f 1,2 > $TMP/sum1 & \
+ cksum $DIR2/$tfile | cut -d" " -f 1,2 > $TMP/sum2
wait
- [ "`cat $TMP/sum1`" = "$SUM" ] || \
- error "$DIR1/f19b `cat $TMP/sum1` != $SUM"
- [ "`cat $TMP/sum2`" = "$SUM" ] || \
- error "$DIR2/f19b `cat $TMP/sum2` != $SUM"
+ [ "$(cat $TMP/sum1)" = "$SUM" ] || \
+ error "$DIR1/$tfile $(cat $TMP/sum1) != $SUM"
+ [ "$(cat $TMP/sum2)" = "$SUM" ] || \
+ error "$DIR2/$tfile $(cat $TMP/sum2) != $SUM"
done
- lctl set_param -n obdfilter.*OST*.readcache_max_filesize=$MAX
- rm $DIR1/f19b
+ set_obdfilter_param $node '' readcache_max_filesize $MAX
+ rm $DIR1/$tfile
}
run_test 19 "test concurrent uncached read races ==============="
run_test 31a "voluntary cancel / blocking ast race=============="
test_31b() {
- remote_ost || { skip "local OST" && return 0; }
- remote_ost_nodsh && skip "remote OST w/o dsh" && return 0
+ remote_ost || { skip "local OST" && return 0; }
+ remote_ost_nodsh && skip "remote OST w/o dsh" && return 0
+
+ # make sure there is no local locks due to destroy
+ wait_mds_ost_sync || error "wait_mds_ost_sync()"
+ wait_delete_completed || error "wait_delete_completed()"
+
mkdir -p $DIR1/$tdir || error "Creating dir $DIR1/$tdir"
lfs setstripe $DIR/$tdir/$tfile -i 0 -c 1
cp /etc/hosts $DIR/$tdir/$tfile
run_test 35 "-EINTR cp_ast vs. bl_ast race does not evict client"
test_36() { #bug 16417
- local SIZE
- local SIZE_B
- local i
+ local SIZE
+ local SIZE_B
+ local i
- mkdir -p $DIR1/$tdir
- $LFS setstripe -c -1 $DIR1/$tdir
- i=0
- SIZE=50
- let SIZE_B=SIZE*1024*1024
-
- while [ $i -le 10 ]; do
- lctl mark "start test"
- local before=$($LFS df | awk '{if ($1 ~/^filesystem/) {print $5; exit} }')
- dd if=/dev/zero of=$DIR1/$tdir/file000 bs=1M count=$SIZE
- sync
- sleep 1
- local after_dd=$($LFS df | awk '{if ($1 ~/^filesystem/) {print $5; exit} }')
- multiop_bg_pause $DIR2/$tdir/file000 O_r${SIZE_B}c || return 3
- read_pid=$!
- rm -f $DIR1/$tdir/file000
- kill -USR1 $read_pid
- wait $read_pid
- sleep 1
- local after=$($LFS df | awk '{if ($1 ~/^filesystem/) {print $5; exit} }')
- echo "*** cycle($i) *** before($before):after_dd($after_dd):after($after)"
- # this free space! not used
- if [ $after_dd -ge $after ]; then
- error "space leaked"
- return 1;
- fi
- let i=i+1
- done
+ mkdir -p $DIR1/$tdir
+ $LFS setstripe -c -1 $DIR1/$tdir
+ i=0
+ SIZE=50
+ let SIZE_B=SIZE*1024*1024
+
+ while [ $i -le 10 ]; do
+ lctl mark "start test"
+ local before=$($LFS df | awk '{ if ($1 ~/^filesystem/) \
+ { print $5; exit} }')
+ dd if=/dev/zero of=$DIR1/$tdir/$tfile bs=1M count=$SIZE ||
+ error "dd $DIR1/$tdir/$tfile ${SIZE}MB failed"
+ sync # sync data from client cache
+ sync_all_data # sync data from server cache (delayed allocation)
+ sleep 1
+ local after_dd=$($LFS df | awk '{ if ($1 ~/^filesystem/) \
+ { print $5; exit} }')
+ multiop_bg_pause $DIR2/$tdir/$tfile O_r${SIZE_B}c || return 3
+ read_pid=$!
+ rm -f $DIR1/$tdir/$tfile
+ kill -USR1 $read_pid
+ wait $read_pid
+ wait_delete_completed
+ local after=$($LFS df | awk '{ if ($1 ~/^filesystem/) \
+ { print $5; exit} }')
+ echo "*** cycle($i) *** before($before) after_dd($after_dd)" \
+ "after($after)"
+ # this free space! not used
+ if [ $after_dd -ge $after ]; then
+ error "space leaked"
+ return 1;
+ fi
+ let i=i+1
+ done
}
run_test 36 "handle ESTALE/open-unlink corectly"
run_test 50 "osc lvb attrs: enqueue vs. CP AST =============="
test_60() {
+ [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.0) ]] ||
+ { skip "Need MDS version at least 2.3.0"; return; }
# Create a file
mkdir -p $DIR1/$tdir
file1=$DIR1/$tdir/file
[ "$(mount | grep $MOUNT2)" ] && umount $MOUNT2
-complete $(basename $0) $SECONDS
+complete $SECONDS
check_and_cleanup_lustre
exit_status