}
run_test 17k "symlinks: rsync with xattrs enabled ========================="
+test_17l() { # LU-279
+ mkdir -p $DIR/$tdir
+ touch $DIR/$tdir/$tfile
+ ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk
+ for path in "$DIR/$tdir" "$DIR/$tdir/$tfile" "$DIR/$tdir/$tfile.lnk"; do
+ # -h to not follow symlinks. -m '' to list all the xattrs.
+ # grep to remove first line: '# file: $path'.
+ for xattr in `getfattr -hm '' $path 2>/dev/null | grep -v '^#'`;
+ do
+ lgetxattr_size_check $path $xattr ||
+ error "lgetxattr_size_check $path $xattr failed"
+ done
+ done
+}
+run_test 17l "Ensure lgetxattr's returned xattr size is consistent ========"
+
# LU-1540
test_17m() {
local short_sym="0123456789"
test_24v() {
local NRFILES=100000
- local FREE_INODES=`lfs df -i|grep "filesystem summary" | awk '{print $5}'`
+ local FREE_INODES=$(lfs_df -i | grep "summary" | awk '{print $4}')
[ $FREE_INODES -lt $NRFILES ] && \
skip "not enough free inodes $FREE_INODES required $NRFILES" &&
return
[ $fcount -eq 0 ] && skip "not enough space on OST0" && return
[ $fcount -gt $OSTCOUNT ] && fcount=$OSTCOUNT
- MDS_OSCS=`do_facet $SINGLEMDS lctl dl | awk '/[oO][sS][cC].*md[ts]/ { print $4 }'`
- OFFSET=$(($OSTCOUNT-1))
- OST=-1
- for OSC in $MDS_OSCS; do
- if [ $OST == -1 ]; then {
- OST=`osc_to_ost $OSC`
- } else {
- echo $OSC "is Deactivate:"
- do_facet $SINGLEMDS lctl --device %$OSC deactivate
- } fi
- done
-
- OSTIDX=$(index_from_ostuuid $OST)
- mkdir -p $DIR/$tdir
- $SETSTRIPE -c 1 $DIR/$tdir # 1 stripe / file
+ local MDS_OSCS=$(do_facet $SINGLEMDS lctl dl |
+ awk '/[oO][sS][cC].*md[ts]/ { print $4 }')
+ local OST_DEACTIVE_IDX=-1
+ local OSC
+ local OSTIDX
+ local OST
+
+ for OSC in $MDS_OSCS; do
+ OST=$(osc_to_ost $OSC)
+ OSTIDX=$(index_from_ostuuid $OST)
+ if [ $OST_DEACTIVE_IDX == -1 ]; then
+ OST_DEACTIVE_IDX=$OSTIDX
+ fi
+ if [ $OSTIDX != $OST_DEACTIVE_IDX ]; then
+ echo $OSC "is Deactivated:"
+ do_facet $SINGLEMDS lctl --device %$OSC deactivate
+ fi
+ done
- do_facet ost$((OSTIDX+1)) lctl set_param -n obdfilter.$OST.degraded 1
- sleep_maxage
- createmany -o $DIR/$tdir/$tfile $fcount
- do_facet ost$((OSTIDX+1)) lctl set_param -n obdfilter.$OST.degraded 0
+ OSTIDX=$(index_from_ostuuid $OST)
+ mkdir -p $DIR/$tdir
+ $SETSTRIPE -c 1 $DIR/$tdir # 1 stripe / file
+
+ for OSC in $MDS_OSCS; do
+ OST=$(osc_to_ost $OSC)
+ OSTIDX=$(index_from_ostuuid $OST)
+ if [ $OSTIDX == $OST_DEACTIVE_IDX ]; then
+ echo $OST "is degraded:"
+ do_facet ost$((OSTIDX+1)) lctl set_param -n \
+ obdfilter.$OST.degraded=1
+ fi
+ done
- for i in `seq 0 $OFFSET`; do
- [ `$GETSTRIPE $DIR/$tdir/$tfile$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "$OSTIDX"` ] || \
- error "files created on deactivated OSTs instead of degraded OST"
- done
- for OSC in $MDS_OSCS; do
- [ `osc_to_ost $OSC` != $OST ] && {
- echo $OSC "is activate"
- do_facet $SINGLEMDS lctl --device %$OSC activate
- }
- done
+ sleep_maxage
+ createmany -o $DIR/$tdir/$tfile $fcount
+
+ for OSC in $MDS_OSCS; do
+ OST=$(osc_to_ost $OSC)
+ OSTIDX=$(index_from_ostuuid $OST)
+ if [ $OSTIDX == $OST_DEACTIVE_IDX ]; then
+ echo $OST "is recovered from degraded:"
+ do_facet ost$((OSTIDX+1)) lctl set_param -n \
+ obdfilter.$OST.degraded=0
+ else
+ do_facet $SINGLEMDS lctl --device %$OSC activate
+ fi
+ done
}
run_test 27y "create files while OST0 is degraded and the rest inactive"
# this should be set to future
TEST_39_ATIME=`date -d "1 year" +%s`
-is_sles11() # LU-1783
-{
- if [ -r /etc/SuSE-release ]
- then
- local vers=`grep VERSION /etc/SuSE-release | awk '{print $3}'`
- local patchlev=`grep PATCHLEVEL /etc/SuSE-release \
- | awk '{print $3}'`
- if [ $vers -eq 11 ] && [ $patchlev -eq 1 ]
- then
- return 0
- fi
- fi
- return 1
-}
-
test_39l() {
- is_sles11 && skip "SLES 11 SP1" && return # LU-1783
remote_mds_nodsh && skip "remote MDS with nodsh" && return
- local atime_diff=$(do_facet $SINGLEMDS lctl get_param -n mdd.*.atime_diff)
-
+ local atime_diff=$(do_facet $SINGLEMDS \
+ lctl get_param -n mdd.*MDT0000*.atime_diff)
mkdir -p $DIR/$tdir
# test setting directory atime to future
touch -a -d @$TEST_39_ATIME $DIR/$tdir
local atime=$(stat -c %X $DIR/$tdir)
[ "$atime" = $TEST_39_ATIME ] || \
- error "atime is not set to future: $atime, should be $TEST_39_ATIME"
+ error "atime is not set to future: $atime, $TEST_39_ATIME"
# test setting directory atime from future to now
local d1=$(date +%s)
cancel_lru_locks mdc
atime=$(stat -c %X $DIR/$tdir)
[ "$atime" -ge "$d1" -a "$atime" -le "$d2" ] || \
- error "atime is not updated from future: $atime, should be $d1<atime<$d2"
+ error "atime is not updated from future: $atime, $d1<atime<$d2"
- do_facet $SINGLEMDS lctl set_param -n mdd.*.atime_diff=2
+ do_facet $SINGLEMDS lctl set_param -n mdd.*MDT0000*.atime_diff=2
sleep 3
# test setting directory atime when now > dir atime + atime_diff
[ "$atime" -ge "$d1" -a "$atime" -le "$d2" ] || \
error "atime is not updated : $atime, should be $d2"
- do_facet $SINGLEMDS lctl set_param -n mdd.*.atime_diff=60
+ do_facet $SINGLEMDS lctl set_param -n mdd.*MDT0000*.atime_diff=60
sleep 3
# test not setting directory atime when now < dir atime + atime_diff
[ "$atime" -ge "$d1" -a "$atime" -le "$d2" ] || \
error "atime is updated to $atime, should remain $d1<atime<$d2"
- do_facet $SINGLEMDS lctl set_param -n mdd.*.atime_diff=$atime_diff
+ do_facet $SINGLEMDS \
+ lctl set_param -n mdd.*MDT0000*.atime_diff=$atime_diff
}
run_test 39l "directory atime update ==========================="
}
run_test 51ba "verify nlink for many subdirectory cleanup"
-test_51bb() {
- [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
-
- local ndirs=${TEST51BB_NDIRS:-10}
- local nfiles=${TEST51BB_NFILES:-100}
-
- local numfree=`df -i -P $DIR | tail -n 1 | awk '{ print $4 }'`
-
- [ $numfree -lt $(( ndirs * nfiles)) ] && \
- nfiles=$(( numfree / ndirs - 10 ))
-
- local dir=$DIR/d51bb
- mkdir -p $dir
- local savePOLICY=$(lctl get_param -n lmv.*.placement)
- lctl set_param -n lmv.*.placement=CHAR
-
- lfs df -i $dir
- local IUSED=$(lfs df -i $dir | grep MDT | awk '{print $3}')
- OLDUSED=($IUSED)
-
- declare -a dirs
- for ((i=0; i < $ndirs; i++)); do
- dirs[i]=$dir/$RANDOM
- echo Creating directory ${dirs[i]}
- mkdir -p ${dirs[i]}
- ls $dir
- echo Creating $nfiles in dir ${dirs[i]} ...
- echo "createmany -o ${dirs[i]}/$tfile- $nfiles"
- createmany -o ${dirs[i]}/$tfile- $nfiles
- done
- ls $dir
-
- sleep 1
-
- IUSED=$(lfs df -i $dir | grep MDT | awk '{print $3}')
- NEWUSED=($IUSED)
-
- local rc=0
- for ((i=0; i<${#NEWUSED[@]}; i++)); do
- echo "mds $i: inodes count OLD ${OLDUSED[$i]} NEW ${NEWUSED[$i]}"
- [ ${OLDUSED[$i]} -lt ${NEWUSED[$i]} ] || rc=$((rc + 1))
- done
-
- lctl set_param -n lmv.*.placement=$savePOLICY
-
- [ $rc -ne $MDSCOUNT ] || \
- error "Objects/inodes are not distributed over all mds servers"
-}
-run_test 51bb "mkdir createmany CMD $MDSCOUNT ===================="
-
test_51d() {
[ "$OSTCOUNT" -lt "3" ] && skip_env "skipping test with few OSTs" && return
mkdir -p $DIR/d51d
}
run_test 64b "check out-of-space detection on client ==========="
+test_64c() {
+ $LCTL set_param osc.*OST0000-osc-[^mM]*.cur_grant_bytes=0
+}
+run_test 64c "verify grant shrink ========================------"
+
# bug 1414 - set/get directories' stripe info
test_65a() {
mkdir -p $DIR/d65
declare -a identity_old
- for num in `seq $MDSCOUNT`; do
- switch_identity $num true || identity_old[$num]=$?
- done
+ for num in $(seq $MDSCOUNT); do
+ switch_identity $num true || identity_old[$num]=$?
+ done
SAVE_UMASK=`umask`
umask 0022
cd $SAVE_PWD
umask $SAVE_UMASK
- for num in `seq $MDSCOUNT`; do
- if [ "${identity_old[$num]}" = 1 ]; then
- switch_identity $num false || identity_old[$num]=$?
- fi
- done
+ for num in $(seq $MDSCOUNT); do
+ if [ "${identity_old[$num]}" = 1 ]; then
+ switch_identity $num false || identity_old[$num]=$?
+ fi
+ done
}
run_test 103 "acl test ========================================="
local node
local LDPROC=/proc/fs/ldiskfs
+ local facets=$(get_facets MDS)
- for facet in $(get_facets MDS); do
- canondev=$(ldiskfs_canon *.$(convert_facet2label $facet).mntdev $facet)
- do_facet $facet "test -e $LDPROC/$canondev/max_dir_size" || LDPROC=/sys/fs/ldiskfs
+ for facet in ${facets//,/ }; do
+ canondev=$(ldiskfs_canon \
+ *.$(convert_facet2label $facet).mntdev $facet)
+ do_facet $facet "test -e $LDPROC/$canondev/max_dir_size" ||
+ LDPROC=/sys/fs/ldiskfs
do_facet $facet "echo $1 >$LDPROC/$canondev/max_dir_size"
done
}
MAX=16384
set_dir_limits $MAX
-
mkdir -p $DIR/$tdir
- I=0
- J=0
+ local I=0
+ local J=0
while [ ! $I -gt $((MAX * MDSCOUNT)) ]; do
$MULTIOP $DIR/$tdir/$J Oc
rc=$?
for ls in /proc/fs/lustre/ldlm/namespaces/MGC*/lru_size; do
echo "clear" > $ls
done
- FAIL_ON_ERROR=true cleanup
- FAIL_ON_ERROR=true setup
+ FAIL_ON_ERROR=true cleanup
+ FAIL_ON_ERROR=true setup
}
run_test 900 "umount should not race with any mgc requeue thread"