[[ $($LCTL get_param mdc.*.import) =~ connect_flags.*overstriping ]] ||
skip "server does not support overstriping"
# We do one more stripe than we have OSTs
- [ $OSTCOUNT -ge 159 ] || large_xattr_enabled ||
+ [ $OSTCOUNT -lt 159 ] || large_xattr_enabled ||
skip_env "ea_inode feature disabled"
test_mkdir -p $DIR/$tdir
}
run_test 27o "create file with all full OSTs (should error)"
+function create_and_checktime() {
+ local fname=$1
+ local loops=$2
+ local i
+
+ for ((i=0; i < $loops; i++)); do
+ local start=$SECONDS
+ multiop $fname-$i Oc
+ ((SECONDS-start < TIMEOUT)) ||
+ error "creation took " $((SECONDS-$start)) && return 1
+ done
+}
+
+test_27oo() {
+ local mdts=$(comma_list $(mdts_nodes))
+
+ [ $MDS1_VERSION -lt $(version_code 2.13.57) ] &&
+ skip "Need MDS version at least 2.13.57"
+
+ local f0=$DIR/${tfile}-0
+ local f1=$DIR/${tfile}-1
+
+ wait_delete_completed
+
+ # refill precreated objects
+ $LFS setstripe -i0 -c1 $f0
+
+ saved=$(do_facet mds1 $LCTL get_param -n lov.*0000*.qos_threshold_rr)
+ # force QoS allocation policy
+ do_nodes $mdts $LCTL set_param lov.*.qos_threshold_rr=0%
+ stack_trap "do_nodes $mdts $LCTL set_param \
+ lov.*.qos_threshold_rr=$saved" EXIT
+ sleep_maxage
+
+ # one OST is unavailable, but still have few objects preallocated
+ stop ost1
+ stack_trap "start ost1 $(ostdevname 1) $OST_MOUNT_OPTS; \
+ rm -rf $f1 $DIR/$tdir*" EXIT
+
+ for ((i=0; i < 7; i++)); do
+ mkdir $DIR/$tdir$i || error "can't create dir"
+ $LFS setstripe -c$((OSTCOUNT-1)) $DIR/$tdir$i ||
+ error "can't set striping"
+ done
+ for ((i=0; i < 7; i++)); do
+ create_and_checktime $DIR/$tdir$i/$tfile 100 &
+ done
+ wait
+}
+run_test 27oo "don't let few threads to reserve too many objects"
+
test_27p() {
[[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs"
[ $PARALLEL == "yes" ] && skip "skip parallel run"
test_mkdir -p $DIR/$tdir
local setcount=$(($OSTCOUNT * 2))
- [ $setcount -ge 160 ] || large_xattr_enabled ||
+ [ $setcount -lt 160 ] || large_xattr_enabled ||
skip_env "ea_inode feature disabled"
$LFS setstripe -C $setcount $DIR/$tdir/$tfile ||
test_mkdir -p $DIR/$tdir
local setcount=$(($OSTCOUNT - 1))
- [ $setcount -ge 160 ] || large_xattr_enabled ||
+ [ $setcount -lt 160 ] || large_xattr_enabled ||
skip_env "ea_inode feature disabled"
$LFS setstripe -C $setcount $DIR/$tdir/$tfile ||
test_mkdir -p $DIR/$tdir
local setcount=$(($OSTCOUNT * 2))
- [ $setcount -ge 160 ] || large_xattr_enabled ||
+ [ $setcount -lt 160 ] || large_xattr_enabled ||
skip_env "ea_inode feature disabled"
$LFS setstripe -C $setcount $DIR/$tdir/ ||
run_test 44A "zero length read from a sparse stripe"
test_44a() {
- local nstripe=$($LCTL lov_getconfig $DIR | grep default_stripe_count: |
- awk '{ print $2 }')
+ local nstripe=$($LFS getstripe -c -d $DIR)
[ -z "$nstripe" ] && skip "can't get stripe info"
[[ $nstripe -gt $OSTCOUNT ]] &&
- skip "Wrong default_stripe_count: $nstripe OSTCOUNT: $OSTCOUNT"
+ skip "Wrong default stripe_count: $nstripe OSTCOUNT: $OSTCOUNT"
- local stride=$($LCTL lov_getconfig $DIR | grep default_stripe_size: |
- awk '{ print $2 }')
+ local stride=$($LFS getstripe -S -d $DIR)
if [[ $nstripe -eq 0 || $nstripe -eq -1 ]]; then
- nstripe=$($LCTL lov_getconfig $DIR | grep obd_count: |
- awk '{ print $2 }')
+ nstripe=$($LFS df $DIR | grep OST: | wc -l)
fi
OFFSETS="0 $((stride/2)) $((stride-1))"
[ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
[ $MDS1_VERSION -lt $(version_code 2.13.52) ] &&
skip "Need at least version 2.13.52"
+ [ $CLIENT_VERSION -lt $(version_code 2.14.50) ] &&
+ skip "Need at least version 2.14.50"
lctl get_param -n mdc.$FSNAME-MDT0000*.import |
grep -q subtree ||
skip "Fileset feature is not supported"
$LFS mkdir -i $((MDSCOUNT - 1)) $DIR/$tdir/remote ||
error "mkdir remote failed"
mkdir $DIR/$tdir/remote/subdir || error "mkdir remote/subdir failed"
- $LFS mkdir -c $MDSCOUNT $DIR/$tdir/striped ||
+ $LFS mkdir -i 0 -c $MDSCOUNT $DIR/$tdir/striped ||
error "mkdir striped failed"
mkdir $DIR/$tdir/striped/subdir || error "mkdir striped/subdir failed"
local submount=${MOUNT}_$tdir
mkdir -p $submount || error "mkdir $submount failed"
+ stack_trap "rmdir $submount"
local dir
+ local stat
local fileset=$FILESET
+ local mdts=$(comma_list $(mdts_nodes))
- for dir in $tdir/remote $tdir/remote/subdir \
- $tdir/striped $tdir/striped/subdir $tdir/striped/. ; do
+ stat=$(do_facet mds1 $LCTL get_param -n \
+ mdt.*MDT0000.enable_remote_subdir_mount)
+ stack_trap "do_nodes $mdts $LCTL set_param \
+ mdt.*.enable_remote_subdir_mount=$stat"
+
+ do_nodes $mdts "$LCTL set_param mdt.*.enable_remote_subdir_mount=0"
+ stack_trap "umount_client $submount"
+ FILESET="$fileset/$tdir/remote" mount_client $submount &&
+ error "mount remote dir $dir should fail"
+
+ for dir in $tdir/remote/subdir $tdir/striped $tdir/striped/subdir \
+ $tdir/striped/. ; do
FILESET="$fileset/$dir" mount_client $submount ||
error "mount $dir failed"
umount_client $submount
done
+
+ do_nodes $mdts "$LCTL set_param mdt.*.enable_remote_subdir_mount=1"
+ FILESET="$fileset/$tdir/remote" mount_client $submount ||
+ error "mount $tdir/remote failed"
}
run_test 247f "mount striped or remote directory as fileset"
+test_247g() {
+ [ $MDSCOUNT -lt 4 ] && skip_env "needs >= 4 MDTs"
+ [ $CLIENT_VERSION -lt $(version_code 2.14.50) ] &&
+ skip "Need at least version 2.14.50"
+
+ $LFS mkdir -i 0 -c 4 -H fnv_1a_64 $DIR/$tdir ||
+ error "mkdir $tdir failed"
+ touch $DIR/$tdir/$tfile || error "touch $tfile failed"
+
+ local submount=${MOUNT}_$tdir
+
+ mkdir -p $submount || error "mkdir $submount failed"
+ stack_trap "rmdir $submount"
+
+ FILESET="$fileset/$tdir" mount_client $submount ||
+ error "mount $dir failed"
+ stack_trap "umount $submount"
+
+ local mdts=$(comma_list $(mdts_nodes))
+
+ local nrpcs
+
+ stat $submount > /dev/null
+ cancel_lru_locks $MDC
+ stat $submount > /dev/null
+ stat $submount/$tfile > /dev/null
+ do_nodes $mdts "$LCTL set_param mdt.*.md_stats=clear > /dev/null"
+ stat $submount/$tfile > /dev/null
+ nrpcs=$(do_nodes $mdts "lctl get_param -n mdt.*.md_stats" |
+ awk '/getattr/ {sum += $2} END {print sum}')
+
+ [ -z "$nrpcs" ] || error "$nrpcs extra getattr sent"
+}
+run_test 247g "mount striped directory as fileset caches ROOT lookup lock"
+
test_248a() {
local fast_read_sav=$($LCTL get_param -n llite.*.fast_read 2>/dev/null)
[ -z "$fast_read_sav" ] && skip "no fast read support"
}
run_test 273a "DoM: layout swapping should fail with DOM"
+test_273b() {
+ mkdir -p $DIR/$tdir
+ $LFS setstripe -E 1M -L mdt -E -1 -c -1 $DIR/$tdir
+
+#define OBD_FAIL_MDS_COMMITRW_DELAY 0x16b
+ do_facet mds1 $LCTL set_param fail_loc=0x8000016b fail_val=2
+
+ $MULTIOP $DIR/$tdir/$tfile Ouw2097152c
+}
+run_test 273b "DoM: race writeback and object destroy"
+
test_275() {
remote_ost_nodsh && skip "remote OST with nodsh"
[ $OST1_VERSION -lt $(version_code 2.10.57) ] &&
}
run_test 426 "splice test on Lustre"
+test_427() {
+ [ $MDSCOUNT -ge 2 ] || skip "needs >= 2 MDTs"
+ (( $MDS1_VERSION >= $(version_code 2.12.4) )) ||
+ skip "Need MDS version at least 2.12.4"
+ local log
+
+ mkdir $DIR/$tdir
+ mkdir $DIR/$tdir/1
+ mkdir $DIR/$tdir/2
+ test_mkdir -c $MDSCOUNT -i 1 $DIR/$tdir/1/dir
+ test_mkdir -c $MDSCOUNT -i 1 $DIR/$tdir/2/dir2
+
+ $LFS getdirstripe $DIR/$tdir/1/dir
+
+ #first setfattr for creating updatelog
+ setfattr -n user.attr0 -v "some text" $DIR/$tdir/1/dir
+
+#define OBD_FAIL_OUT_OBJECT_MISS 0x1708
+ do_nodes $(comma_list $(mdts_nodes)) $LCTL set_param fail_loc=0x80001708
+ setfattr -n user.attr1 -v "some text" $DIR/$tdir/1/dir &
+ setfattr -n user.attr2 -v "another attr" $DIR/$tdir/2/dir2 &
+
+ sleep 2
+ fail mds2
+ wait_recovery_complete mds2 $((2*TIMEOUT))
+
+ log=$(do_facet mds1 dmesg | tac | sed "/${TESTNAME//_/ }/,$ d")
+ echo $log | grep "get update log failed" &&
+ error "update log corruption is detected" || true
+}
+run_test 427 "Failed DNE2 update request shouldn't corrupt updatelog"
+
lseek_test_430() {
local offset
local file=$1