. ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh}
init_logging
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 64b 68 71 77f 78 115 124b 230d"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 24D 27m 64b 68 71 77f 78 115 124b 230d"
if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
- # bug number for skipped test: LU-1593 LU-4536 LU-5242 LU-1957 LU-2805
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 34h 65ic 132 180 184c"
+ # bug number for skipped test: LU-4536 LU-5242 LU-1957 LU-2805
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 65ic 78 79 80 180 184c"
[ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b 51ba"
fi
check_fs_consistency_17n ||
error "e2fsck report error after create files under remote dir"
- for ((i=0;i<10;i++)); do
+ for ((i = 0; i < 10; i++)); do
rm -rf $DIR/$tdir/remote_dir_${i} ||
error "destroy remote dir error $i"
done
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.50) ] &&
skip "lustre < 2.4.50 does not support migrate mv " && return
- for ((i=0; i<10; i++)); do
+ for ((i = 0; i < 10; i++)); do
mkdir -p $DIR/$tdir/remote_dir_${i}
createmany -o $DIR/$tdir/remote_dir_${i}/f 10 ||
error "create files under remote dir failed $i"
- $LFS mv -M 1 $DIR/$tdir/remote_dir_${i} ||
+ $LFS mv --mdt-index 1 $DIR/$tdir/remote_dir_${i} ||
error "migrate remote dir error $i"
done
check_fs_consistency_17n || error "e2fsck report error after migration"
- for ((i=0;i<10;i++)); do
+ for ((i = 0; i < 10; i++)); do
rm -rf $DIR/$tdir/remote_dir_${i} ||
error "destroy remote dir error $i"
done
}
run_test 24C "check .. in striped dir"
+test_24D() { # LU-6101
+ local NFILES=50000
+
+ rm -rf $DIR/$tdir
+ mkdir -p $DIR/$tdir
+ createmany -m $DIR/$tdir/$tfile $NFILES
+ local t=$(ls $DIR/$tdir | wc -l)
+ local u=$(ls $DIR/$tdir | sort -u | wc -l)
+ local v=$(ls -ai $DIR/$tdir | sort -u | wc -l)
+ if [ $t -ne $NFILES -o $u -ne $NFILES -o $v -ne $((NFILES + 2)) ] ; then
+ error "Expected $NFILES files, got $t ($u unique $v .&..)"
+ fi
+
+ rm -rf $DIR/$tdir || error "Can not delete directories"
+}
+run_test 24D "readdir() returns correct number of entries after cursor reload"
+
test_25a() {
echo '== symlink sanity ============================================='
run_test 27g "$GETSTRIPE with no objects"
test_27i() {
- touch $DIR/d27/fsome || error "touch failed"
- [[ $($GETSTRIPE -c $DIR/d27/fsome) -gt 0 ]] || error "missing objects"
+ test_mkdir $DIR/$tdir
+ touch $DIR/$tdir/$tfile || error "touch failed"
+ [[ $($GETSTRIPE -c $DIR/$tdir/$tfile) -gt 0 ]] ||
+ error "missing objects"
}
run_test 27i "$GETSTRIPE with some objects"
}
run_test 27D "validate llapi_layout API"
+# Verify that default_easize is increased from its initial value after
+# accessing a widely striped file.
+test_27E() {
+ [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return
+
+ # 72 bytes is the minimum space required to store striping
+ # information for a file striped across one OST:
+ # (sizeof(struct lov_user_md_v3) +
+ # sizeof(struct lov_user_ost_data_v1))
+ local min_easize=72
+ $LCTL set_param -n llite.*.default_easize $min_easize ||
+ error "lctl set_param failed"
+ local easize=$($LCTL get_param -n llite.*.default_easize)
+
+ [ $easize -eq $min_easize ] ||
+ error "failed to set default_easize"
+
+ $LFS setstripe -c $OSTCOUNT $DIR/$tfile ||
+ error "setstripe failed"
+ cat $DIR/$tfile
+ rm $DIR/$tfile
+
+ easize=$($LCTL get_param -n llite.*.default_easize)
+
+ [ $easize -gt $min_easize ] ||
+ error "default_easize not updated"
+}
+run_test 27E "check that default extended attribute size properly increases"
+
# createtest also checks that device nodes are created and
# then visible correctly (#2091)
test_28() { # bug 2091
}
run_test 33e "mkdir and striped directory should have same mode"
+cleanup_33f() {
+ trap 0
+ do_facet $SINGLEMDS $LCTL set_param mdt.*.enable_remote_dir_gid=0
+}
+
+test_33f() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+ mkdir $DIR/$tdir
+ chmod go+rwx $DIR/$tdir
+ do_facet $SINGLEMDS $LCTL set_param mdt.*.enable_remote_dir_gid=-1
+ trap cleanup_33f EXIT
+
+ $RUNAS lfs mkdir -c$MDSCOUNT $DIR/$tdir/striped_dir ||
+ error "cannot create striped directory"
+
+ $RUNAS touch $DIR/$tdir/striped_dir/{0..16} ||
+ error "cannot create files in striped directory"
+
+ $RUNAS rm $DIR/$tdir/striped_dir/{0..16} ||
+ error "cannot remove files in striped directory"
+
+ $RUNAS rmdir $DIR/$tdir/striped_dir ||
+ error "cannot remove striped directory"
+
+ cleanup_33f
+}
+run_test 33f "nonroot user can create, access, and remove a striped directory"
+
TEST_34_SIZE=${TEST_34_SIZE:-2000000000000}
test_34a() {
rm -f $DIR/f34
error "$LFS find did not return an error"
# Make a directory unsearchable. This should NOT be the last entry in
# directory order. Arbitrarily pick the 6th entry
- chmod 700 $(lfs find $DIR/$tdir -type d | sed '6!d')
+ chmod 700 $($LFS find $DIR/$tdir -type d | sed '6!d')
local count=$($RUNAS $LFS find $DIR/non_existent $DIR/$tdir | wc -l)
# The user should be able to see 10 directories and 9 files
[ $count == 19 ] || error "$LFS find did not continue after error"
}
run_test 56z "lfs find should continue after an error"
+test_56aa() { # LU-5937
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+ mkdir $DIR/$tdir
+ $LFS setdirstripe -c$MDSCOUNT $DIR/$tdir/striped_dir
+
+ createmany -o $DIR/$tdir/striped_dir/${tfile}- 1024
+ local dirs=$(lfs find --size +8k $DIR/$tdir/)
+
+ [ -n "$dirs" ] || error "lfs find --size wrong under striped dir"
+}
+run_test 56aa "lfs find --size under striped dir"
+
test_57a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
# note test will not do anything if MDS is not local
[[ $F78SIZE -gt $MEMTOTAL ]] && F78SIZE=$MEMTOTAL
[[ $F78SIZE -gt 512 ]] && F78SIZE=512
[[ $F78SIZE -gt $((MAXFREE / 1024)) ]] && F78SIZE=$((MAXFREE / 1024))
- SMALLESTOST=$(lfs df $DIR | grep OST | awk '{ print $4 }' | sort -n |
+ SMALLESTOST=$($LFS df $DIR | grep OST | awk '{ print $4 }' | sort -n |
head -n1)
echo "Smallest OST: $SMALLESTOST"
[[ $SMALLESTOST -lt 10240 ]] &&
for offset in $(seq 0 $[$STRIPE_COUNT - 1]); do
local size=$((STRIPE_SIZE * num))
local file=file"$num-$offset-$count"
- stripe_size=$(lfs getstripe -S $PWD/$file)
+ stripe_size=$($LFS getstripe -S $PWD/$file)
[[ $stripe_size -ne $size ]] &&
error "$file: size $stripe_size != $size"
- stripe_count=$(lfs getstripe -c $PWD/$file)
+ stripe_count=$($LFS getstripe -c $PWD/$file)
# allow fewer stripes to be created, ORI-601
[[ $stripe_count -lt $(((3 * count + 3) / 4)) ]] &&
error "$file: count $stripe_count != $count"
- stripe_index=$(lfs getstripe -i $PWD/$file)
+ stripe_index=$($LFS getstripe -i $PWD/$file)
[[ $stripe_index -ne 0 ]] &&
stripe_index_all_zero=false
done
}
run_test 102q "flistxattr should not return trusted.link EAs for orphans"
+test_102r() {
+ touch $DIR/$tfile || error "touch"
+ setfattr -n user.$(basename $tfile) $DIR/$tfile || error "setfattr"
+ getfattr -n user.$(basename $tfile) $DIR/$tfile || error "getfattr"
+ rm $DIR/$tfile || error "rm"
+}
+run_test 102r "set EAs with empty values"
+
run_acl_subtest()
{
$LUSTRE/tests/acl/run $LUSTRE/tests/acl/$1.test
test_116b() { # LU-2093
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- [ -z "$($LCTL get_param -n lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr |
- head -1 2>/dev/null)" ] && skip "no QOS" && return
#define OBD_FAIL_MDS_OSC_CREATE_FAIL 0x147
- local old_rr
- old_rr=$(do_facet $SINGLEMDS lctl get_param -n \
- lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr | head -1)
+ local old_rr=$(do_facet $SINGLEMDS lctl get_param -n \
+ lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr | head -1)
+ [ -z "$old_rr" ] && skip "no QOS" && return 0
do_facet $SINGLEMDS lctl set_param \
lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr=0
mkdir -p $DIR/$tdir
}
run_test 131e "test read hitting hole"
-get_ost_param() {
- local token=$1
- local gl_sum=0
- for node in $(osts_nodes); do
- gl=$(do_node $node "$LCTL get_param -n ost.OSS.ost.stats" | awk '/'$token'/ {print $2}' | head -n 1)
- [ x$gl = x"" ] && gl=0
- gl_sum=$((gl_sum + gl))
- done
- echo $gl_sum
-}
-
-som_mode_switch() {
- local som=$1
- local gl1=$2
- local gl2=$3
-
- if [ x$som = x"enabled" ]; then
- [ $((gl2 - gl1)) -gt 0 ] && error "no glimpse RPC is expected"
- MOUNT_OPTS=`echo $MOUNT_OPTS |
- sed 's/som_preview,\|,som_preview\|som_preview//g'`
- do_facet mgs "$LCTL conf_param $FSNAME.mdt.som=disabled"
- else
- [ $((gl2 - gl1)) -gt 0 ] || error "some glimpse RPC is expected"
- MOUNT_OPTS="${MOUNT_OPTS:+$MOUNT_OPTS,}som_preview"
- do_facet mgs "$LCTL conf_param $FSNAME.mdt.som=enabled"
- fi
-
- # do remount to make new mount-conf parameters actual
- echo remounting...
- sync
- stopall
- setupall
-}
-
-test_132() { #1028, SOM
- [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- remote_mds_nodsh && skip "remote MDS with nodsh" && return
- local mdtidx=$($LFS getstripe -M $DIR)
- local facet=mds$((mdtidx + 1))
-
- local MOUNTOPT_SAVE=$MOUNTOPT
-
- dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
- cancel_lru_locks osc
- som1=$(do_facet $facet "$LCTL get_param mdt.*.som" |
- awk -F= ' {print $2}' | head -n 1)
-
- gl1=$(get_ost_param "ldlm_glimpse_enqueue")
- stat $DIR/$tfile >/dev/null
- gl2=$(get_ost_param "ldlm_glimpse_enqueue")
- echo "====> SOM is "$som1", "$((gl2 - gl1))" glimpse RPC occured"
- rm $DIR/$tfile
- som_mode_switch $som1 $gl1 $gl2
-
- dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
- cancel_lru_locks osc
-
- som2=$(do_facet $facet "$LCTL get_param mdt.*.som" |
- awk -F= ' {print $2}' | head -n 1)
- if [ $som1 == $som2 ]; then
- error "som is still "$som2
- if [ x$som2 = x"enabled" ]; then
- som2="disabled"
- else
- som2="enabled"
- fi
- fi
-
- gl1=$(get_ost_param "ldlm_glimpse_enqueue")
- stat $DIR/$tfile >/dev/null
- gl2=$(get_ost_param "ldlm_glimpse_enqueue")
- echo "====> SOM is "$som2", "$((gl2 - gl1))" glimpse RPC occured"
- som_mode_switch $som2 $gl1 $gl2
- MOUNT_OPTS=$MOUNT_OPTS_SAVE
-}
-run_test 132 "som avoids glimpse rpc"
-
check_stats() {
local res
local count
error "find $proc_dirs failed"
[ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.5.54) ] &&
- skip "Too old lustre on MDS"
+ skip "Too old lustre on MDS" && return
[ $(lustre_version_code ost1) -le $(version_code 2.5.54) ] &&
- skip "Too old lustre on ost1"
+ skip "Too old lustre on ost1" && return
for facet in $SINGLEMDS ost1; do
do_facet $facet find $proc_dirs \
[ -z "$FID" ] && error "path2fid unable to get $DIR/$tfile FID"
# check that we get the same pathname back
- local FOUND=$($LFS fid2path $MOUNT $FID)
+ local FOUND=$($LFS fid2path $MOUNT "$FID")
[ -z "$FOUND" ] && error "fid2path unable to get $FID path"
[ "$FOUND" != "$DIR/$tfile" ] &&
error "fid2path(path2fid($DIR/$tfile)) = $FOUND != $DIR/$tfile"
N=$((N + 1))
done
- $LFS fid2path $MOUNT $FID1 $FID2 $FID3 | while read PATHNAME; do
+ $LFS fid2path $MOUNT "$FID1" "$FID2" "$FID3" | while read PATHNAME;
+ do
[ "$PATHNAME" = "$DIR/$tfile.$N" ] ||
error "fid2path pathname $PATHNAME != $DIR/$tfile.$N:"
N=$((N + 1))
rm -f $DIR/$tfile
touch $DIR/$tfile
- fid=$($LFS path2fid $DIR/$tfile)
+ local fid=$($LFS path2fid $DIR/$tfile)
# Open the file
fd=$(free_fd)
cmd="exec $fd<$DIR/$tfile"
eval $cmd
- fid_list=$(do_facet $SINGLEMDS $LCTL get_param $proc_ofile)
- echo $fid_list | grep $fid
+ local fid_list=$(do_facet $SINGLEMDS $LCTL get_param $proc_ofile)
+ echo "$fid_list" | grep "$fid"
rc=$?
cmd="exec $fd>/dev/null"
}
run_test 154f "get parent fids by reading link ea"
+test_154g()
+{
+ [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.92) ]] ||
+ { skip "Need MDS version at least 2.6.92"; return 0; }
+
+ mkdir -p $DIR/$tdir
+ llapi_fid_test -d $DIR/$tdir
+}
+run_test 154g "various llapi FID tests"
+
test_155_small_load() {
local temp=$TMP/$tfile
local file=$DIR/$tfile
local ref2=$dir0/ref2
local file1=$dir0/file1
local file2=$dir0/file2
- # create a file large enough for the concurent test
+ # create a file large enough for the concurrent test
dd if=/dev/urandom of=$ref1 bs=1M count=$((RANDOM % 50 + 20))
dd if=/dev/urandom of=$ref2 bs=1M count=$((RANDOM % 50 + 20))
echo "ref file size: ref1($(stat -c %s $ref1))," \
}
run_test 184d "allow stripeless layouts swap"
+test_184e() {
+ [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.94) ]] ||
+ { skip "Need MDS version at least 2.6.94"; return 0; }
+ check_swap_layouts_support && return 0
+ [ -z "$(which getfattr 2>/dev/null)" ] &&
+ skip "no getfattr command" && return 0
+
+ local file1=$DIR/$tdir/$tfile-1
+ local file2=$DIR/$tdir/$tfile-2
+ local file3=$DIR/$tdir/$tfile-3
+ local lovea
+
+ mkdir -p $DIR/$tdir
+ touch $file1 || error "create $file1 failed"
+ $OPENFILE -f O_CREAT:O_LOV_DELAY_CREATE $file2 ||
+ error "create $file2 failed"
+ $OPENFILE -f O_CREAT:O_LOV_DELAY_CREATE $file3 ||
+ error "create $file3 failed"
+
+ $LFS swap_layouts $file1 $file2 ||
+ error "swap $file1 $file2 layouts failed"
+
+ lovea=$(getfattr -n trusted.lov $file1 | grep ^trusted)
+ [[ -z "$lovea" ]] || error "$file1 shouldn't have lovea"
+
+ echo 123 > $file1 || error "Should be able to write into $file1"
+
+ $LFS swap_layouts $file1 $file3 ||
+ error "swap $file1 $file3 layouts failed"
+
+ echo 123 > $file1 || error "Should be able to write into $file1"
+
+ rm -rf $file1 $file2 $file3
+}
+run_test 184e "Recreate layout after stripeless layout swaps"
test_185() { # LU-2441
# LU-3553 - no volatile file support in old servers
local OSTIDX=0
test_mkdir -p $DIR/$tdir
- local OST=$(lfs osts | grep ${OSTIDX}": " | \
+ local OST=$($LFS osts | grep ${OSTIDX}": " | \
awk '{print $2}' | sed -e 's/_UUID$//')
# on the mdt's osc
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
local MDTIDX=1
- mkdir -p $DIR/$tdir/test_230_local
+ test_mkdir $DIR/$tdir
+ test_mkdir -i0 -c1 $DIR/$tdir/test_230_local
local mdt_idx=$($GETSTRIPE -M $DIR/$tdir/test_230_local)
[ $mdt_idx -ne 0 ] &&
error "create local directory on wrong MDT $mdt_idx"
local migrate_dir=$DIR/$tdir/migrate_dir
local other_dir=$DIR/$tdir/other_dir
- mkdir -p $migrate_dir
- mkdir -p $other_dir
+ test_mkdir $DIR/$tdir
+ test_mkdir -i0 -c1 $migrate_dir
+ test_mkdir -i0 -c1 $other_dir
for ((i=0; i<10; i++)); do
mkdir -p $migrate_dir/dir_${i}
createmany -o $migrate_dir/dir_${i}/f 10 ||
ln -s $other_dir/$tfile $migrate_dir/${tfile}_ln_other
$LFS mv -v -M $MDTIDX $migrate_dir ||
- error "migrate remote dir error"
+ error "migrate remote dir error"
echo "migratate to MDT1, then checking.."
- for ((i=0; i<10; i++)); do
+ for ((i = 0; i < 10; i++)); do
for file in $(find $migrate_dir/dir_${i}); do
mdt_index=$($LFS getstripe -M $file)
[ $mdt_index == $MDTIDX ] ||
stripe_count=$($LFS getstripe -c $migrate_dir/dir_default_stripe2)
[ $stripe_count = 2 ] ||
- error "dir strpe_count $d != 2 after migration."
+ error "dir strpe_count $d != 2 after migration."
stripe_count=$($LFS getstripe -c $migrate_dir/${tfile}_stripe2)
[ $stripe_count = 2 ] ||
- error "file strpe_count $d != 2 after migration."
+ error "file strpe_count $d != 2 after migration."
#migrate back to MDT0
MDTIDX=0
$LFS mv -v -M $MDTIDX $migrate_dir ||
- error "migrate remote dir error"
+ error "migrate remote dir error"
echo "migrate back to MDT0, checking.."
for file in $(find $migrate_dir); do
local MDTIDX=1
local mdt_index
local file
+ local migrate_dir=$DIR/$tdir/migrate_dir
#If migrating directory fails in the middle, all entries of
#the directory is still accessiable.
- mkdir -p $DIR/$tdir
- stat $DIR/$tdir
- createmany -o $DIR/$tdir/f 10 ||
- error "create files under ${tdir} failed"
+ test_mkdir $DIR/$tdir
+ test_mkdir -i0 -c1 $migrate_dir
+ stat $migrate_dir
+ createmany -o $migrate_dir/f 10 ||
+ error "create files under ${migrate_dir} failed"
#failed after migrating 5 entries
#OBD_FAIL_MIGRATE_ENTRIES 0x1801
do_facet mds1 lctl set_param fail_loc=0x20001801
do_facet mds1 lctl set_param fail_val=5
- local t=`ls $DIR/$tdir | wc -l`
- $LFS mv -M $MDTIDX $DIR/$tdir &&
- error "migrate should failed after 5 entries"
- local u=`ls $DIR/$tdir | wc -l`
+ local t=$(ls $migrate_dir | wc -l)
+ $LFS mv --mdt-index $MDTIDX $migrate_dir &&
+ error "migrate should fail after 5 entries"
+ local u=$(ls $migrate_dir | wc -l)
[ "$u" == "$t" ] || error "$u != $t during migration"
- for file in $(find $DIR/$tdir); do
+ for file in $(find $migrate_dir); do
stat $file || error "stat $file failed"
done
do_facet mds1 lctl set_param fail_loc=0
do_facet mds1 lctl set_param fail_val=0
- $LFS mv -M $MDTIDX $DIR/$tdir ||
+ $LFS mv -M $MDTIDX $migrate_dir ||
error "migrate open files should failed with open files"
echo "Finish migration, then checking.."
- for file in $(find $DIR/$tdir); do
+ for file in $(find $migrate_dir); do
mdt_index=$($LFS getstripe -M $file)
[ $mdt_index == $MDTIDX ] ||
error "$file is not on MDT${MDTIDX}"
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
local MDTIDX=1
local mdt_index
+ local migrate_dir=$DIR/$tdir/migrate_dir
local i
local j
- mkdir -p $DIR/$tdir
+ test_mkdir $DIR/$tdir
+ test_mkdir -i0 -c1 $migrate_dir
for ((i=0; i<100; i++)); do
- mkdir -p $DIR/$tdir/dir_${i}
- createmany -o $DIR/$tdir/dir_${i}/f 100 ||
+ test_mkdir -i0 -c1 $migrate_dir/dir_${i}
+ createmany -o $migrate_dir/dir_${i}/f 100 ||
error "create files under remote dir failed $i"
done
- $LFS mv -M $MDTIDX -v $DIR/$tdir || error "migrate remote dir error"
+ $LFS mv -M $MDTIDX -v $migrate_dir || error "migrate remote dir error"
echo "Finish migration, then checking.."
- for file in $(find $DIR/$tdir); do
+ for file in $(find $migrate_dir); do
mdt_index=$($LFS getstripe -M $file)
[ $mdt_index == $MDTIDX ] ||
error "$file is not on MDT${MDTIDX}"
ln $DIR/$tfile $DIR/$tfile.lnk
touch $DIR/$tfile.new
mv $DIR/$tfile.new $DIR/$tfile
- local fid1=$(lfs path2fid $DIR/$tfile)
- local fid2=$(lfs path2fid $DIR/$tfile.lnk)
- local path1=$(lfs fid2path $FSNAME $fid1)
+ local fid1=$($LFS path2fid $DIR/$tfile)
+ local fid2=$($LFS path2fid $DIR/$tfile.lnk)
+ local path1=$($LFS fid2path $FSNAME "$fid1")
[ $tfile == $path1 ] || error "linkea inconsistent: $tfile $fid1 $path1"
- local path2=$(lfs fid2path $FSNAME $fid2)
+ local path2=$($LFS fid2path $FSNAME "$fid2")
[ $tfile.lnk == $path2 ] ||
error "linkea inconsistent: $tfile.lnk $fid2 $path2!"
rm -f $DIR/$tfile*
}
run_test 242 "mdt_readpage failure should not cause directory unreadable"
+test_243()
+{
+ test_mkdir -p $DIR/$tdir
+ group_lock_test -d $DIR/$tdir || error "A group lock test failed"
+}
+run_test 243 "various group lock tests"
+
+test_250() {
+ [ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR/$tfile) + 1)))" = "zfs" ] \
+ && skip "no 16TB file size limit on ZFS" && return
+
+ $SETSTRIPE -c 1 $DIR/$tfile
+ # ldiskfs extent file size limit is (16TB - 4KB - 1) bytes
+ local size=$((16 * 1024 * 1024 * 1024 * 1024 - 4096 - 1))
+ $TRUNCATE $DIR/$tfile $size || error "truncate $tfile to $size failed"
+ dd if=/dev/zero of=$DIR/$tfile bs=10 count=1 oflag=append \
+ conv=notrunc,fsync && error "append succeeded"
+ return 0
+}
+run_test 250 "Write above 16T limit"
+
cleanup_test_300() {
trap 0
umask $SAVE_UMASK
}
run_test 300f "check rename cross striped directory"
-test_300g() {
- [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+test_300_check_default_striped_dir()
+{
+ local dirname=$1
+ local default_count=$2
+ local default_index=$3
local stripe_count
+ local stripe_index
+ local dir_stripe_index
local dir
- mkdir $DIR/$tdir
- $LFS setdirstripe -i 0 -c $MDSCOUNT -t all_char \
- $DIR/$tdir/striped_dir ||
- error "set striped dir error"
-
- $LFS setdirstripe -D -c $MDSCOUNT -t all_char $DIR/$tdir/striped_dir ||
+ echo "checking $dirname $default_count $default_index"
+ $LFS setdirstripe -D -c $default_count -i $default_index \
+ -t all_char $DIR/$tdir/$dirname ||
error "set default stripe on striped dir error"
+ stripe_count=$($LFS getdirstripe -D -c $DIR/$tdir/$dirname)
+ [ $stripe_count -eq $default_count ] ||
+ error "expect $default_count get $stripe_count for $dirname"
- stripe_count=$($LFS getdirstripe -D -c $DIR/$tdir/striped_dir)
- [ $stripe_count -eq $MDSCOUNT ] ||
- error "default stripe wrong expect $MDSCOUNT get $stripe_count"
+ stripe_index=$($LFS getdirstripe -D -i $DIR/$tdir/$dirname)
+ [ $stripe_index -eq $default_index ] ||
+ error "expect $default_index get $stripe_index for $dirname"
- mkdir -p $DIR/$tdir/striped_dir/{test1,test2,test3,test4}
+ mkdir $DIR/$tdir/$dirname/{test1,test2,test3,test4} ||
+ error "create dirs failed"
- for dir in $(find $DIR/$tdir/striped_dir/*); do
+ createmany -o $DIR/$tdir/$dirname/f- 10 || error "create files failed"
+ unlinkmany $DIR/$tdir/$dirname/f- 10 || error "unlink files failed"
+ for dir in $(find $DIR/$tdir/$dirname/*); do
stripe_count=$($LFS getdirstripe -c $dir)
- [ $stripe_count -eq $MDSCOUNT ] ||
- error "expect $MDSCOUNT get $stripe_count for $dir"
+ [ $stripe_count -eq $default_count ] ||
+ error "stripe count $default_count != $stripe_count for $dir"
+
+ stripe_index=$($LFS getdirstripe -i $dir)
+ [ $default_index -eq -1 -o $stripe_index -eq $default_index ] ||
+ error "$stripe_index != $default_index for $dir"
+
+ #check default stripe
+ stripe_count=$($LFS getdirstripe -D -c $dir)
+ [ $stripe_count -eq $default_count ] ||
+ error "default count $default_count != $stripe_count for $dir"
+
+ stripe_index=$($LFS getdirstripe -D -i $dir)
+ [ $stripe_index -eq $default_index ] ||
+ error "default index $default_index != $stripe_index for $dir"
done
+ rmdir $DIR/$tdir/$dirname/* || error "rmdir failed"
+}
+
+test_300g() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local dir
+ local stripe_count
+ local stripe_index
+
+ mkdir $DIR/$tdir
+ mkdir $DIR/$tdir/normal_dir
+
+ test_300_check_default_striped_dir normal_dir $MDSCOUNT 1
+ test_300_check_default_striped_dir normal_dir 1 0
+ test_300_check_default_striped_dir normal_dir 2 1
+ test_300_check_default_striped_dir normal_dir 2 -1
- rmdir $DIR/$tdir/striped_dir/* || error "rmdir1 failed"
- #change default stripe count to 2
- $LFS setdirstripe -D -c 2 -t all_char $DIR/$tdir/striped_dir ||
+ #delete default stripe information
+ echo "delete default stripeEA"
+ $LFS setdirstripe -d $DIR/$tdir/normal_dir ||
error "set default stripe on striped dir error"
- mkdir -p $DIR/$tdir/striped_dir/{test1,test2,test3,test4}
+ mkdir -p $DIR/$tdir/normal_dir/{test1,test2,test3,test4}
+ for dir in $(find $DIR/$tdir/normal_dir/*); do
+ stripe_count=$($LFS getdirstripe -c $dir)
+ [ $stripe_count -eq 0 ] ||
+ error "expect 1 get $stripe_count for $dir"
+ stripe_index=$($LFS getdirstripe -i $dir)
+ [ $stripe_index -eq 0 ] ||
+ error "expect 0 get $stripe_index for $dir"
+ done
+}
+run_test 300g "check default striped directory for normal directory"
- rmdir $DIR/$tdir/striped_dir/* || error "rmdir2 failed"
+test_300h() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local dir
+ local stripe_count
- #change default stripe count to 1
- $LFS setdirstripe -D -c 1 -t all_char $DIR/$tdir/striped_dir ||
+ mkdir $DIR/$tdir
+ $LFS setdirstripe -i 0 -c $MDSCOUNT -t all_char \
+ $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+
+ test_300_check_default_striped_dir striped_dir $MDSCOUNT 1
+ test_300_check_default_striped_dir striped_dir 1 0
+ test_300_check_default_striped_dir striped_dir 2 1
+ test_300_check_default_striped_dir striped_dir 2 -1
+
+ #delete default stripe information
+ $LFS setdirstripe -d $DIR/$tdir/striped_dir ||
error "set default stripe on striped dir error"
mkdir -p $DIR/$tdir/striped_dir/{test1,test2,test3,test4}
for dir in $(find $DIR/$tdir/striped_dir/*); do
stripe_count=$($LFS getdirstripe -c $dir)
- [ $stripe_count -eq 1 ] ||
+ [ $stripe_count -eq 0 ] ||
error "expect 1 get $stripe_count for $dir"
done
- rmdir $DIR/$tdir/striped_dir/* || error "rmdir3 failed"
}
-run_test 300g "check default striped directory for striped directory"
+run_test 300h "check default striped directory for striped directory"
-test_300h() {
+test_300i() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
local stripe_count
return 0
}
-run_test 300h "client handle unknown hash type striped directory"
+run_test 300i "client handle unknown hash type striped directory"
test_400a() { # LU-1606, was conf-sanity test_74
local extra_flags=''