. ${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-5242 LU-1957 LU-2805
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 34h 132 180 184c"
+ # bug number for skipped test: LU-1593 LU-4536 LU-5242 LU-1957 LU-2805
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 34h 65ic 132 180 184c"
[ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b 51ba"
fi
}
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 ============================================='
local OSTIDX=$1
local FAILLOC=$2
local FAILIDX=${3:-$OSTIDX}
+ local ofacet=ost$((OSTIDX + 1))
- test_mkdir -p $DIR/$tdir
- local MDSIDX=$(get_mds_dir "$DIR/$tdir")
- echo OSTIDX=$OSTIDX MDSIDX=$MDSIDX
+ test_mkdir -p -c1 $DIR/$tdir
+ local mdtidx=$($LFS getstripe -M $DIR/$tdir)
+ local mfacet=mds$((mdtidx + 1))
+ echo OSTIDX=$OSTIDX MDTIDX=$mdtidx
local OST=$(ostname_from_index $OSTIDX)
- local MDT_INDEX=$(lfs df | grep "\[MDT:$((MDSIDX - 1))\]" | awk '{print $1}' | \
- sed -e 's/_UUID$//;s/^.*-//')
# on the mdt's osc
- local mdtosc_proc1=$(get_mdtosc_proc_path mds${MDSIDX} $OST)
- local last_id=$(do_facet mds${MDSIDX} lctl get_param -n \
+ local mdtosc_proc1=$(get_mdtosc_proc_path $mfacet $OST)
+ local last_id=$(do_facet $mfacet lctl get_param -n \
osc.$mdtosc_proc1.prealloc_last_id)
- local next_id=$(do_facet mds${MDSIDX} lctl get_param -n \
+ local next_id=$(do_facet $mfacet lctl get_param -n \
osc.$mdtosc_proc1.prealloc_next_id)
- local mdtosc_proc2=$(get_mdtosc_proc_path mds${MDSIDX})
- do_facet mds${MDSIDX} lctl get_param osc.$mdtosc_proc2.prealloc*
+ local mdtosc_proc2=$(get_mdtosc_proc_path $mfacet)
+ do_facet $mfacet lctl get_param osc.$mdtosc_proc2.prealloc*
test_mkdir -p $DIR/$tdir/${OST}
$SETSTRIPE -i $OSTIDX -c 1 $DIR/$tdir/${OST}
#define OBD_FAIL_OST_ENOSPC 0x215
- do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=$FAILIDX
- do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0x215
+ do_facet $ofacet lctl set_param fail_val=$FAILIDX fail_loc=0x215
echo "Creating to objid $last_id on ost $OST..."
createmany -o $DIR/$tdir/${OST}/f $next_id $((last_id - next_id + 2))
- do_facet mds${MDSIDX} lctl get_param osc.$mdtosc_proc2.prealloc*
- do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=$FAILLOC
+ do_facet $mfacet lctl get_param osc.$mdtosc_proc2.prealloc*
+ do_facet $ofacet lctl set_param fail_loc=$FAILLOC
sleep_maxage
}
fi
remote_mds_nodsh && skip "remote MDS with nodsh" && return
- local dir=$DIR/d57b
+ local dir=$DIR/$tdir
local FILECOUNT=100
local FILE1=$dir/f1
local FILEN=$dir/f$FILECOUNT
rm -rf $dir || error "removing $dir"
- test_mkdir -p $dir || error "creating $dir"
- local num=$(get_mds_dir $dir)
- local mymds=mds$num
+ test_mkdir -p -c1 $dir || error "creating $dir"
+ local mdtidx=$($LFS getstripe -M $dir)
+ local mdtname=MDT$(printf %04x $mdtidx)
+ local facet=mds$((mdtidx + 1))
echo "mcreating $FILECOUNT files"
createmany -m $dir/f 1 $FILECOUNT || \
sync
sleep 1
df $dir #make sure we get new statfs data
- local MDSFREE=$(do_facet $mymds \
- lctl get_param -n osd*.*MDT000$((num -1)).kbytesfree)
- local MDCFREE=$(lctl get_param -n mdc.*MDT000$((num -1))-mdc-*.kbytesfree)
+ local MDSFREE=$(do_facet $facet \
+ lctl get_param -n osd*.*$mdtname.kbytesfree)
+ local MDCFREE=$(lctl get_param -n mdc.*$mdtname-mdc-*.kbytesfree)
echo "opening files to create objects/EAs"
local FILE
for FILE in `seq -f $dir/f%g 1 $FILECOUNT`; do
sleep 1 #make sure we get new statfs data
df $dir
- local MDSFREE2=$(do_facet $mymds \
- lctl get_param -n osd*.*MDT000$((num -1)).kbytesfree)
- local MDCFREE2=$(lctl get_param -n mdc.*MDT000$((num -1))-mdc-*.kbytesfree)
+ local MDSFREE2=$(do_facet $facet \
+ lctl get_param -n osd*.*$mdtname.kbytesfree)
+ local MDCFREE2=$(lctl get_param -n mdc.*$mdtname-mdc-*.kbytesfree)
if [[ $MDCFREE2 -lt $((MDCFREE - 16)) ]]; then
if [ "$MDSFREE" != "$MDSFREE2" ]; then
error "MDC before $MDCFREE != after $MDCFREE2"
}
run_test 102p "check setxattr(2) correctly fails without permission"
+test_102q() {
+ orphan_linkea_check $DIR/$tfile || error "orphan_linkea_check"
+}
+run_test 102q "flistxattr should not return trusted.link EAs for orphans"
+
run_acl_subtest()
{
$LUSTRE/tests/acl/run $LUSTRE/tests/acl/$1.test
local MAX_HRS=10
local LIMIT=$($LCTL get_param -n $NSDIR.pool.limit)
log "LIMIT=$LIMIT"
+ if [ $LIMIT -lt $LRU_SIZE ]; then
+ skip "Limit is too small $LIMIT"
+ return 0
+ fi
# Make LVF so higher that sleeping for $SLEEP is enough to _start_
# killing locks. Some time was spent for creating locks. This means
test_132() { #1028, SOM
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- remote_mds_nodsh && skip "remote MDS with nodsh" && return
- local num=$(get_mds_dir $DIR)
- local mymds=mds${num}
- local MOUNT_OPTS_SAVE=$MOUNT_OPTS
+ remote_mds_nodsh && skip "remote MDS with nodsh" && return
+ local mdtidx=$($LFS getstripe -M $DIR)
+ local facet=mds$((mdtidx + 1))
- dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
- cancel_lru_locks osc
+ local MOUNTOPT_SAVE=$MOUNTOPT
- som1=$(do_facet $mymds "$LCTL get_param -n mdt.*.som" | head -n 1)
+ 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
dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
cancel_lru_locks osc
- som2=$(do_facet $mymds "$LCTL get_param -n mdt.*.som" | head -n 1)
+ 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
local fid=$2
local path=$(${LFS} fid2path $*)
+ # Remove the '//' indicating a remote directory
+ path=$(echo $path | sed 's#//#/#g')
RC=$?
if [ $RC -ne 0 ]; then
}
run_test 162b "striped directory path lookup sanity"
+# LU-4239: Verify fid2path works with paths 100 or more directories deep
+test_162c() {
+ test_mkdir $DIR/$tdir.local
+ test_mkdir $DIR/$tdir.remote
+ local lpath=$tdir.local
+ local rpath=$tdir.remote
+
+ for ((i = 0; i <= 101; i++)); do
+ lpath="$lpath/$i"
+ mkdir $DIR/$lpath
+ FID=$($LFS path2fid $DIR/$lpath | tr -d '[]') ||
+ error "get fid for local directory $DIR/$lpath failed"
+ check_path "$DIR/$lpath" $MOUNT $FID --link 0 ||
+ error "check path for local directory $DIR/$lpath failed"
+
+ rpath="$rpath/$i"
+ test_mkdir $DIR/$rpath
+ FID=$($LFS path2fid $DIR/$rpath | tr -d '[]') ||
+ error "get fid for remote directory $DIR/$rpath failed"
+ check_path "$DIR/$rpath" $MOUNT $FID --link 0 ||
+ error "check path for remote directory $DIR/$rpath failed"
+ done
+
+ return 0
+}
+run_test 162c "fid2path works with paths 100 or more directories deep"
+
test_169() {
# do directio so as not to populate the page cache
log "creating a 10 Mb file"
local ost_range="$first_ost $last_ost $ost_step"
local test_path=$POOL_ROOT/$POOL_DIR_NAME
local file_dir=$POOL_ROOT/file_tst
+ local subdir=$test_path/subdir
local rc=0
while : ; do
mkdir -p $test_path
pool_set_dir $POOL $test_path || { rc=$? ; break; }
pool_check_dir $POOL $test_path || { rc=$? ; break; }
+ mkdir -p $subdir
+ pool_check_dir $POOL $subdir || { rc=$? ; break; }
pool_dir_rel_path $POOL $POOL_DIR_NAME $POOL_ROOT \
|| { rc=$? ; break; }
# former test_200e test_200f