DEF_STRIPE_COUNT=-1
CHECK_GRANT=${CHECK_GRANT:-"yes"}
GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""}
-export PARALLEL=${PARALLEL:-"no"}
TRACE=${TRACE:-""}
LUSTRE=${LUSTRE:-$(dirname $0)/..}
LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi}
. $LUSTRE/tests/test-framework.sh
-init_test_env $@
+init_test_env "$@"
init_logging
ALWAYS_EXCEPT="$SANITY_EXCEPT "
-# bug number for skipped test: LU-9693 LU-6493 LU-9693
-ALWAYS_EXCEPT+=" 42a 42b 42c "
-# bug number: LU-8411 LU-9054
-ALWAYS_EXCEPT+=" 407 312"
+always_except LU-9693 42a 42c
+always_except LU-6493 42b
+always_except LU-14541 277
+always_except LU-9054 312
+always_except LU-8411 407
if $SHARED_KEY; then
- # bug number: LU-14181 LU-14181
- ALWAYS_EXCEPT+=" 64e 64f"
-fi
-
-selinux_status=$(getenforce)
-if [ "$selinux_status" != "Disabled" ]; then
- # bug number:
- ALWAYS_EXCEPT+=""
+ always_except LU-14181 64e 64f
+ always_except LU-15910 413g
fi
# skip the grant tests for ARM until they are fixed
if [[ $(uname -m) = aarch64 ]]; then
- # bug number: LU-11671
- ALWAYS_EXCEPT+=" 45"
- # bug number: LU-14067 LU-14067
- ALWAYS_EXCEPT+=" 400a 400b"
+ always_except LU-11671 45
fi
# skip nfs tests on kernels >= 4.12.0 until they are fixed
if [ $LINUX_VERSION_CODE -ge $(version_code 4.12.0) ]; then
- # bug number: LU-12661
- ALWAYS_EXCEPT+=" 817"
+ always_except LU-12661 817
fi
# skip cgroup tests on RHEL8.1 kernels until they are fixed
if (( $LINUX_VERSION_CODE >= $(version_code 4.18.0) &&
$LINUX_VERSION_CODE < $(version_code 5.4.0) )); then
- # bug number: LU-13063
- ALWAYS_EXCEPT+=" 411"
+ always_except LU-13063 411
fi
#skip ACL tests on RHEL8 and SLES15 until tests changed to use other users
if (( $(egrep -cw "^bin|^daemon" /etc/passwd) < 2 )); then
- # bug number: LU-15259 LU-15259
- ALWAYS_EXCEPT+=" 103a 125 154a"
+ always_except LU-15259 103a 125 154a
fi
# 5 12 8 12 15 (min)"
[ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 60i 64b 68 71 115 135 136 230d 300o"
if [ "$mds1_FSTYPE" = "zfs" ]; then
- # bug number for skipped test:
- ALWAYS_EXCEPT+=" "
# 13 (min)"
[ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b"
fi
if [ "$ost1_FSTYPE" = "zfs" ]; then
- # bug number for skipped test: LU-1941 LU-1941 LU-1941 LU-1941
- ALWAYS_EXCEPT+=" 130a 130b 130c 130d 130e 130f 130g"
+ always_except LU-1941 130a 130b 130c 130d 130e 130f 130g
fi
proc_regexp="/{proc,sys}/{fs,sys,kernel/debug}/{lustre,lnet}/"
if [ -r /etc/SuSE-release ]; then
sles_version=$(sles_version_code)
[ $sles_version -lt $(version_code 11.4.0) ] &&
- # bug number for skipped test: LU-4341
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 170"
+ always_except LU-4341 170
+
[ $sles_version -lt $(version_code 12.0.0) ] &&
- # bug number for skipped test: LU-3703
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 234"
+ always_except LU-3703 234
elif [ -r /etc/os-release ]; then
if grep -qi ubuntu /etc/os-release; then
ubuntu_version=$(version_code $(sed -n -e 's/"//g' \
awk '{ print $1 }'))
if [[ $ubuntu_version -gt $(version_code 16.0.0) ]]; then
- # bug number for skipped test:
- # LU-10334 LU-10366
- ALWAYS_EXCEPT+=" 103a 410"
+ always_except LU-10334 103a
+ always_except LU-10366 410
fi
fi
fi
# get striping information
ost_idx=($($LFS getstripe $tfile$i |
tail -n $((OSTCOUNT + 1)) | awk '{print $1}'))
- echo ${ost_idx[@]}
+ echo "OST Index: ${ost_idx[*]}"
# check the layout
[ ${#ost_idx[@]} -eq $OSTCOUNT ] ||
for index in $(seq 0 $((OSTCOUNT - 1))); do
found=0
- for j in $(echo ${ost_idx[@]}); do
+ for j in "${ost_idx[@]}"; do
if [ $index -eq $j ]; then
found=1
break
fi
done
[ $found = 1 ] ||
- error "Can not find $index in ${ost_idx[@]}"
+ error "Can not find $index in ${ost_idx[*]}"
done
done
}
cancel_lru_locks osc
# exceed atime_diff and access file
- sleep 6
+ sleep 10
dd if=$DIR/$tfile of=/dev/null bs=4k count=1 ||
error "can't udpate atime"
run_test 54c "block device works in lustre ====================="
test_54d() {
- f="$DIR/f54d"
- string="aaaaaa"
- mknod $f p
- [ "$string" = $(echo $string > $f | cat $f) ] || error "$f != $string"
+ local pipe="$DIR/$tfile.pipe"
+ local string="aaaaaa"
+
+ mknod $pipe p
+ echo -n "$string" > $pipe &
+ local result=$(cat $pipe)
+ [[ "$result" == "$string" ]] || error "$result != $string"
}
run_test 54d "fifo device works in lustre ======================"
run_test 64g "grant shrink on MDT"
test_64h() {
+ (( $OST1_VERSION >= $(version_code 2.14.56) )) ||
+ skip "need OST at least 2.14.56 to avoid grant shrink on read"
+
local instance=$($LFS getname -i $DIR)
local osc_tgt="$FSNAME-OST0000-osc-$instance"
local num_exps=$(do_facet ost1 \
run_test 64h "grant shrink on read"
test_64i() {
- (( $OST1_VERSION >= $(version_code 2.14.55) )) ||
- skip "need OST at least 2.14.55 to avoid grant shrink on replay"
+ (( $OST1_VERSION >= $(version_code 2.14.56) )) ||
+ skip "need OST at least 2.14.56 to avoid grant shrink on replay"
[ $PARALLEL == "yes" ] && skip "skip parallel run"
remote_ost_nodsh && skip "remote OSTs with nodsh"
}
ra_check_101() {
- local READ_SIZE=$1
- local STRIPE_SIZE=$2
- local FILE_LENGTH=$3
- local RA_INC=1048576
- local STRIDE_LENGTH=$((STRIPE_SIZE/READ_SIZE))
- local discard_limit=$((((STRIDE_LENGTH - 1)*3/(STRIDE_LENGTH*OSTCOUNT))* \
- (STRIDE_LENGTH*OSTCOUNT - STRIDE_LENGTH)))
- DISCARD=$($LCTL get_param -n llite.*.read_ahead_stats |
+ local read_size=$1
+ local stripe_size=$2
+ local stride_length=$((stripe_size / read_size))
+ local stride_width=$((stride_length * OSTCOUNT))
+ local discard_limit=$(( ((stride_length - 1) * 3 / stride_width) *
+ (stride_width - stride_length) ))
+ local discard=$($LCTL get_param -n llite.*.read_ahead_stats |
get_named_value 'read.but.discarded' | calc_total)
- if [[ $DISCARD -gt $discard_limit ]]; then
+
+ if [[ $discard -gt $discard_limit ]]; then
$LCTL get_param llite.*.read_ahead_stats
- error "Too many ($DISCARD) discarded pages with size (${READ_SIZE})"
+ error "($discard) discarded pages with size (${read_size})"
else
- echo "Read-ahead success for size ${READ_SIZE}"
+ echo "Read-ahead success for size ${read_size}"
fi
}
local fileacl
local saved_debug=$($LCTL get_param -n debug)
- (( $MDS1_VERSION >= $(version_code 2.14.0) )) ||
- skip "MDS needs to be at least 2.14.0"
+ (( $MDS1_VERSION >= $(version_code 2.14.52) )) ||
+ skip "MDS needs to be at least 2.14.52"
large_xattr_enabled || skip_env "ea_inode feature disabled"
echo "Before recordsize change"
lfs_df=($($LFS df -h | grep "filesystem_summary:"))
- df=($(df -h | grep "/mnt/lustre"$))
+ df=($(df -h | grep "$MOUNT"$))
# For checking.
echo "lfs output : ${lfs_df[*]}"
echo "After recordsize change"
lfs_df_after=($($LFS df -h | grep "filesystem_summary:"))
- df_after=($(df -h | grep "/mnt/lustre"$))
+ df_after=($(df -h | grep "$MOUNT"$))
# For checking.
echo "lfs output : ${lfs_df_after[*]}"
}
run_test 115 "verify dynamic thread creation===================="
-free_min_max () {
- wait_delete_completed
- AVAIL=($(lctl get_param -n osc.*[oO][sS][cC]-[^M]*.kbytesavail))
- echo "OST kbytes available: ${AVAIL[@]}"
- MAXV=${AVAIL[0]}
- MAXI=0
- MINV=${AVAIL[0]}
- MINI=0
- for ((i = 0; i < ${#AVAIL[@]}; i++)); do
- #echo OST $i: ${AVAIL[i]}kb
- if [[ ${AVAIL[i]} -gt $MAXV ]]; then
- MAXV=${AVAIL[i]}
- MAXI=$i
- fi
- if [[ ${AVAIL[i]} -lt $MINV ]]; then
- MINV=${AVAIL[i]}
- MINI=$i
- fi
- done
- echo "Min free space: OST $MINI: $MINV"
- echo "Max free space: OST $MAXI: $MAXV"
-}
-
test_116a() { # was previously test_116()
[ $PARALLEL == "yes" ] && skip "skip parallel run"
[[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs"
log "testing UP system. Performance may be lower than expected."
SLOWOK=1
fi
+ running_in_vm && SLOWOK=1
rm -rf $DIR/$tdir
test_mkdir $DIR/$tdir
}
test_180a() {
- [ $PARALLEL == "yes" ] && skip "skip parallel run"
-
- if ! [ -d /sys/fs/lustre/echo_client ] &&
- ! module_loaded obdecho; then
- load_module obdecho/obdecho &&
- stack_trap "rmmod obdecho" EXIT ||
- error "unable to load obdecho on client"
- fi
-
- local osc=$($LCTL dl | grep -v mdt | awk '$3 == "osc" {print $4; exit}')
- local host=$($LCTL get_param -n osc.$osc.import |
- awk '/current_connection:/ { print $2 }' )
- local target=$($LCTL get_param -n osc.$osc.import |
- awk '/target:/ { print $2 }' )
- target=${target%_UUID}
-
- if [ -n "$target" ]; then
- setup_obdecho_osc $host $target &&
- stack_trap "cleanup_obdecho_osc $target" EXIT ||
- { error "obdecho setup failed with $?"; return; }
-
- obdecho_test ${target}_osc client ||
- error "obdecho_test failed on ${target}_osc"
- else
- $LCTL get_param osc.$osc.import
- error "there is no osc.$osc.import target"
- fi
+ skip "obdecho on osc is no longer supported"
}
run_test 180a "test obdecho on osc"
}
run_test 181 "Test open-unlinked dir ========================"
-test_182() {
+test_182a() {
local fcount=1000
local tcount=10
rm -rf $DIR/$tdir
}
-run_test 182 "Test parallel modify metadata operations ================"
+run_test 182a "Test parallel modify metadata operations from mdc"
+
+test_182b() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local dcount=1000
+ local tcount=10
+ local stime
+ local etime
+ local delta
+
+ do_facet mds1 $LCTL list_param \
+ osp.$FSNAME-MDT*-osp-MDT*.rpc_stats ||
+ skip "MDS lacks parallel RPC handling"
+
+ $LFS mkdir -i 0 $DIR/$tdir || error "creating dir $DIR/$tdir"
+
+ rpc_count=$(do_facet mds1 $LCTL get_param -n \
+ osp.$FSNAME-MDT0001-osp-MDT0000.max_mod_rpcs_in_flight)
+
+ stime=$(date +%s)
+ createmany -i 0 -d $DIR/$tdir/t- $tcount
+
+ for (( i = 0; i < $tcount; i++ )) ; do
+ createmany -i 0 -d $DIR/$tdir/t-$i/d- 0 $dcount &
+ done
+ wait
+ etime=$(date +%s)
+ delta=$((etime - stime))
+ echo "Time for file creation $delta sec for $rpc_count parallel RPCs"
+
+ stime=$(date +%s)
+ for (( i = 0; i < $tcount; i++ )) ; do
+ unlinkmany -d $DIR/$tdir/$i/d- $dcount &
+ done
+ wait
+ etime=$(date +%s)
+ delta=$((etime - stime))
+ echo "Time for file removal $delta sec for $rpc_count parallel RPCs"
+
+ rm -rf $DIR/$tdir
+
+ $LFS mkdir -i 0 $DIR/$tdir || error "creating dir $DIR/$tdir"
+
+ do_facet mds1 $LCTL set_param osp.$FSNAME-MDT0001-osp-MDT0000.max_mod_rpcs_in_flight=1
+
+ stime=$(date +%s)
+ createmany -i 0 -d $DIR/$tdir/t- $tcount
+
+ for (( i = 0; i < $tcount; i++ )) ; do
+ createmany -i 0 -d $DIR/$tdir/t-$i/d- 0 $dcount &
+ done
+ wait
+ etime=$(date +%s)
+ delta=$((etime - stime))
+ echo "Time for file creation $delta sec for 1 RPC sent at a time"
+
+ stime=$(date +%s)
+ for (( i = 0; i < $tcount; i++ )) ; do
+ unlinkmany -d $DIR/$tdir/t-$i/d- $dcount &
+ done
+ wait
+ etime=$(date +%s)
+ delta=$((etime - stime))
+ echo "Time for file removal $delta sec for 1 RPC sent at a time"
+
+ do_facet mds1 $LCTL set_param osp.$FSNAME-MDT0001-osp-MDT0000.max_mod_rpcs_in_flight=$rpc_count
+}
+run_test 182b "Test parallel modify metadata operations from osp"
test_183() { # LU-2275
[ $PARALLEL == "yes" ] && skip "skip parallel run"
}
run_test 244b "multi-threaded write with group lock"
-test_245() {
+test_245a() {
local flagname="multi_mod_rpcs"
local connect_data_name="max_mod_rpcs"
local out
echo "$out" | grep -qw $connect_data_name ||
error "import should have connect data $connect_data_name"
}
-run_test 245 "check mdc connection flag/data: multiple modify RPCs"
+run_test 245a "check mdc connection flag/data: multiple modify RPCs"
+
+test_245b() {
+ local flagname="multi_mod_rpcs"
+ local connect_data_name="max_mod_rpcs"
+ local out
+
+ remote_mds_nodsh && skip "remote MDS with nodsh"
+ [[ $MDSCOUNT -ge 2 ]] || skip "needs >= 2 MDTs"
+
+ # check if multiple modify RPCs flag is set
+ out=$(do_facet mds1 \
+ $LCTL get_param osp.$FSNAME-MDT0001-osp-MDT0000.import |
+ grep "connect_flags:")
+ echo "$out"
+
+ [[ "$out" =~ $flagname ]] || skip "connect flag $flagname is not set"
+
+ # check if multiple modify RPCs data is set
+ out=$(do_facet mds1 \
+ $LCTL get_param osp.$FSNAME-MDT0001-osp-MDT0000.import)
+
+ [[ "$out" =~ $connect_data_name ]] ||
+ {
+ echo "$out"
+ error "missing connect data $connect_data_name"
+ }
+}
+run_test 245b "check osp connection flag/data: multiple modify RPCs"
cleanup_247() {
local submount=$1
for rootpath in "$submount" "$submount///" "$submount/dir1"; do
echo "$rootpath $fid"
found=$($LFS fid2path $rootpath "$fid")
- [ -n "found" ] || error "fid2path should succeed"
+ [ -n "$found" ] || error "fid2path should succeed"
[ "$found" == "$td" ] || error "fid2path $found != $td"
done
# check wrong root path format
echo "Free space: ${spfree}%, default DOM stripe: ${dom_def}K"
[[ $dom_def != $dom_current ]] ||
error "Default stripe size was not changed"
- if [[ $spfree > 0 ]] ; then
+ if (( spfree > 0 )) ; then
dom_set=$($LFS getstripe -S $dom)
- [[ $dom_set == $((dom_def * 1024)) ]] ||
+ (( dom_set == dom_def * 1024 )) ||
error "DOM component size is still old"
else
[[ $($LFS getstripe -L $dom) != "mdt" ]] ||
run_test 315 "read should be accounted"
test_316() {
- [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
- large_xattr_enabled || skip_env "ea_inode feature disabled"
+ (( $MDSCOUNT >= 2 )) || skip "needs >= 2 MDTs"
+ large_xattr_enabled || skip "ea_inode feature disabled"
- rm -rf $DIR/$tdir/d
- mkdir -p $DIR/$tdir/d
- chown nobody $DIR/$tdir/d
- touch $DIR/$tdir/d/file
+ mkdir_on_mdt0 $DIR/$tdir || error "mkdir $tdir failed"
+ mkdir $DIR/$tdir/d || error "mkdir $tdir/d failed"
+ chown nobody $DIR/$tdir/d || error "chown $tdir/d failed"
+ touch $DIR/$tdir/d/$tfile || error "touch $tdir/d/$tfile failed"
- $LFS mv -m1 $DIR/$tdir/d || error "lfs mv failed"
+ $LFS migrate -m1 $DIR/$tdir/d || error "lfs migrate -m1 failed"
}
-run_test 316 "lfs mv"
+run_test 316 "lfs migrate of file with large_xattr enabled"
test_317() {
[ $MDS1_VERSION -lt $(version_code 2.11.53) ] &&
# Truncate to size $trunc_sz bytes. Strip tail blocks and leave only 8
# blocks. The block count must drop to 8.
#
- trunc_sz=$(($(stat --format=%s $DIR/$tfile) - \
+ trunc_sz=$(($(stat --format=%s $DIR/$tfile) -
((bs - grant_blk_size) + 1)))
$TRUNCATE $DIR/$tfile $trunc_sz ||
error "truncate $tfile to $trunc_sz failed"
run_test 318 "Verify async readahead tunables"
test_319() {
- [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ (( $MDSCOUNT >= 2 )) || skip "needs >= 2 MDTs"
local before=$(date +%s)
local evict
#define OBD_FAIL_LDLM_LOCAL_CANCEL_PAUSE 0x32c
$LCTL set_param fail_val=5 fail_loc=0x8000032c
- $LFS mv -m1 $file &
+ $LFS migrate -m1 $mdir &
sleep 1
dd if=$file of=/dev/null
$LFS setstripe -c 1 -i 0 $DIR/$tfile
$LCTL set_param ldlm.namespaces.*.lru_size=clear
+ # Disabled: DIO does not push out buffered I/O pages, see LU-12587
# request a new lock on client
- dd if=/dev/zero of=$DIR/$tfile bs=1M count=1
+ #dd if=/dev/zero of=$DIR/$tfile bs=1M count=1
- dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=direct conv=notrunc
- local lock_count=$($LCTL get_param -n \
- ldlm.namespaces.$imp_name.lru_size)
- [[ $lock_count -eq 0 ]] || error "lock should be cancelled by direct IO"
+ #dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=direct conv=notrunc
+ #local lock_count=$($LCTL get_param -n \
+ # ldlm.namespaces.$imp_name.lru_size)
+ #[[ $lock_count -eq 0 ]] || error "lock should be cancelled by direct IO"
$LCTL set_param ldlm.namespaces.*-OST0000-osc-ffff*.lru_size=clear
- # no lock cached, should use lockless IO and not enqueue new lock
- dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=direct conv=notrunc
+ # no lock cached, should use lockless DIO and not enqueue new lock
+ dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=direct \
+ conv=notrunc ||
+ error "dio write failed"
lock_count=$($LCTL get_param -n \
ldlm.namespaces.$imp_name.lru_size)
[[ $lock_count -eq 0 ]] || error "no lock should be held by direct IO"
+
+ $LCTL set_param ldlm.namespaces.*-OST0000-osc-ffff*.lru_size=clear
+
+ # no lock cached, should use locked DIO append
+ dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=direct oflag=append \
+ conv=notrunc || error "DIO append failed"
+ lock_count=$($LCTL get_param -n \
+ ldlm.namespaces.*-OST0000-osc-ffff*.lru_size)
+ [[ $lock_count -ne 0 ]] || error "lock still must be held by DIO append"
}
run_test 398a "direct IO should cancel lock otherwise lockless"
test_398b() { # LU-4198
which fio || skip_env "no fio installed"
- $LFS setstripe -c -1 $DIR/$tfile
+ $LFS setstripe -c -1 -S 1M $DIR/$tfile
- local size=12
+ local size=48
dd if=/dev/zero of=$DIR/$tfile bs=1M count=$size
local njobs=4
- echo "mix direct rw ${size}M to OST0 by fio with $njobs jobs..."
- fio --name=rand-rw --rw=randrw --bs=$PAGE_SIZE --direct=1 \
- --numjobs=$njobs --fallocate=none \
- --iodepth=16 --allow_file_create=0 --size=$((size/njobs))M \
- --filename=$DIR/$tfile &
- bg_pid=$!
-
- echo "mix buffer rw ${size}M to OST0 by fio with $njobs jobs..."
- fio --name=rand-rw --rw=randrw --bs=$PAGE_SIZE \
- --numjobs=$njobs --fallocate=none \
- --iodepth=16 --allow_file_create=0 --size=$((size/njobs))M \
- --filename=$DIR/$tfile || true
- wait $bg_pid
+ # Single page, multiple pages, stripe size, 4*stripe size
+ for bsize in $(( $PAGE_SIZE )) $(( 4*$PAGE_SIZE )) 1048576 4194304; do
+ echo "mix direct rw ${bsize} by fio with $njobs jobs..."
+ fio --name=rand-rw --rw=randrw --bs=$bsize --direct=1 \
+ --numjobs=$njobs --fallocate=none \
+ --iodepth=16 --allow_file_create=0 --size=$((size/njobs))M \
+ --filename=$DIR/$tfile &
+ bg_pid=$!
+
+ echo "mix buffer rw ${bsize} by fio with $njobs jobs..."
+ fio --name=rand-rw --rw=randrw --bs=$bsize \
+ --numjobs=$njobs --fallocate=none \
+ --iodepth=16 --allow_file_create=0 --size=$((size/njobs))M \
+ --filename=$DIR/$tfile || true
+ wait $bg_pid
+ done
+
+ evict=$(do_facet client $LCTL get_param \
+ osc.$FSNAME-OST*-osc-*/state |
+ awk -F"[ [,]" '/EVICTED ]$/ { if (t<$5) {t=$5;} } END { print t }')
+
+ [ -z "$evict" ] || [[ $evict -le $before ]] ||
+ (do_facet client $LCTL get_param \
+ osc.$FSNAME-OST*-osc-*/state;
+ error "eviction happened: $evict before:$before")
rm -f $DIR/$tfile
}
ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-*.filesfree))
bavail=($(lctl get_param -n mdc.*[mM][dD][cC]-*.kbytesavail))
- max=$(((${ffree[max_index]} >> 8) * \
+ max=$(((${ffree[max_index]} >> 8) *
(${bavail[max_index]} * bsize >> 16)))
- min=$(((${ffree[min_index]} >> 8) * \
+ min=$(((${ffree[min_index]} >> 8) *
(${bavail[min_index]} * bsize >> 16)))
diff=$(((max - min) * 100 / min))
i=$((i + 1))
done
- echo "MDT filesfree available: ${ffree[@]}"
- echo "MDT blocks available: ${bavail[@]}"
+ echo "MDT filesfree available: ${ffree[*]}"
+ echo "MDT blocks available: ${bavail[*]}"
echo "weight diff=$diff%"
}
(( ${ffree[min_index]} < 10000000 )) ||
skip "too many free files in MDT$min_index"
- echo "MDT filesfree available: ${ffree[@]}"
- echo "MDT blocks available: ${bavail[@]}"
+ echo "MDT filesfree available: ${ffree[*]}"
+ echo "MDT blocks available: ${bavail[*]}"
echo "weight diff=$(((max - min) * 100 / min))%"
echo
echo "Mkdir (stripe_count $stripe_count) with balanced space usage:"
}
run_test 413e "check default max-inherit value"
-test_413f() {
- (( MDSCOUNT >= 2 )) || skip "We need at least 2 MDTs for this test"
-
- (( MDS1_VERSION >= $(version_code 2.14.55) )) ||
- skip "Need server version at least 2.14.55"
-
- getfattr -d -m trusted.dmv --absolute-names $DIR > $TMP/dmv.ea ||
- error "dump $DIR default LMV failed"
- stack_trap "setfattr --restore=$TMP/dmv.ea"
-
- $LFS setdirstripe -D -i -1 -c 1 -X 3 --max-inherit-rr 3 $DIR ||
- error "set $DIR default LMV failed"
-
+test_fs_dmv_inherit()
+{
local testdir=$DIR/$tdir
local count
local inherit
local inherit_rr
- for i in $(seq 3); do
+ for i in 1 2 3; do
mkdir $testdir || error "mkdir $testdir failed"
count=$($LFS getdirstripe -D -c $testdir)
(( count == 1 )) ||
(( count == 0 )) ||
error "$testdir default LMV count not zero: $count"
}
+
+test_413f() {
+ (( MDSCOUNT >= 2 )) || skip "We need at least 2 MDTs for this test"
+
+ (( MDS1_VERSION >= $(version_code 2.14.55) )) ||
+ skip "Need server version at least 2.14.55"
+
+ getfattr -d -m trusted.dmv --absolute-names $DIR > $TMP/dmv.ea ||
+ error "dump $DIR default LMV failed"
+ stack_trap "setfattr --restore=$TMP/dmv.ea"
+
+ $LFS setdirstripe -D -i -1 -c 1 -X 3 --max-inherit-rr 3 $DIR ||
+ error "set $DIR default LMV failed"
+
+ test_fs_dmv_inherit
+}
run_test 413f "lfs getdirstripe -D list ROOT default LMV if it's not set on dir"
+test_413g() {
+ (( MDSCOUNT >= 2 )) || skip "We need at least 2 MDTs for this test"
+
+ mkdir -p $DIR/$tdir/l2/l3/l4 || error "mkdir $tdir/l1/l2/l3 failed"
+ getfattr -d -m trusted.dmv --absolute-names $DIR > $TMP/dmv.ea ||
+ error "dump $DIR default LMV failed"
+ stack_trap "setfattr --restore=$TMP/dmv.ea"
+
+ $LFS setdirstripe -D -i -1 -c 1 -X 3 --max-inherit-rr 3 $DIR ||
+ error "set $DIR default LMV failed"
+
+ FILESET="$FILESET/$tdir/l2/l3/l4" mount_client $MOUNT2 ||
+ error "mount $MOUNT2 failed"
+ stack_trap "umount_client $MOUNT2"
+
+ local saved_DIR=$DIR
+
+ export DIR=$MOUNT2
+
+ stack_trap "export DIR=$saved_DIR"
+
+ # first check filesystem-wide default LMV inheritance
+ test_fs_dmv_inherit || error "incorrect fs default LMV inheritance"
+
+ # then check subdirs are spread to all MDTs
+ createmany -d $DIR/s $((MDSCOUNT * 100)) || error "createmany failed"
+
+ local count=$($LFS getstripe -m $DIR/s* | sort -u | wc -l)
+
+ (( $count == $MDSCOUNT )) || error "dirs are spread to $count MDTs"
+}
+run_test 413g "enforce ROOT default LMV on subdir mount"
+
test_413z() {
local pids=""
local subdir
total=500
# this test may be slow on ZFS
- [ "$mds1_FSTYPE" == "zfs" ] && total=100
+ [ "$mds1_FSTYPE" == "zfs" ] && total=50
# though this test is designed for striped directory, let's test normal
# directory too since lock is always saved as CoS lock.
}
run_test 432 "mv dir from outside Lustre"
+test_433() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run"
+
+ [[ -n "$($LCTL list_param llite.*.inode_cache 2>/dev/null)" ]] ||
+ skip "inode cache not supported"
+
+ $LCTL set_param llite.*.inode_cache=0
+ stack_trap "$LCTL set_param llite.*.inode_cache=1"
+
+ local count=256
+ local before
+ local after
+
+ cancel_lru_locks mdc
+ test_mkdir $DIR/$tdir || error "mkdir $tdir"
+ createmany -m $DIR/$tdir/f $count
+ createmany -d $DIR/$tdir/d $count
+ ls -l $DIR/$tdir > /dev/null
+ stack_trap "rm -rf $DIR/$tdir"
+
+ before=$(num_objects)
+ cancel_lru_locks mdc
+ after=$(num_objects)
+
+ # sometimes even @before is less than 2 * count
+ while (( before - after < count )); do
+ sleep 1
+ after=$(num_objects)
+ wait=$((wait + 1))
+ (( wait % 5 == 0 )) && echo "wait $wait seconds objects: $after"
+ if (( wait > 60 )); then
+ error "inode slab grew from $before to $after"
+ fi
+ done
+
+ echo "lustre_inode_cache $before objs before lock cancel, $after after"
+}
+run_test 433 "ldlm lock cancel releases dentries and inodes"
+
prep_801() {
[[ $MDS1_VERSION -lt $(version_code 2.9.55) ]] ||
[[ $OST1_VERSION -lt $(version_code 2.9.55) ]] &&