}
run_test 0d "check export proc ============================="
+test_0e() { # LU-13417
+ (( $MDSCOUNT > 1 )) ||
+ skip "We need at least 2 MDTs for this test"
+
+ (( $MDS1_VERSION >= $(version_code 2.14.51) )) ||
+ skip "Need server version at least 2.14.51"
+
+ local default_lmv_count=$($LFS getdirstripe -D -c $MOUNT)
+ local default_lmv_index=$($LFS getdirstripe -D -i $MOUNT)
+
+ [ $default_lmv_count -eq 1 ] ||
+ error "$MOUNT default stripe count $default_lmv_count"
+
+ [ $default_lmv_index -eq -1 ] ||
+ error "$MOUNT default stripe index $default_lmv_index"
+
+ mkdir $MOUNT/$tdir.1 || error "mkdir $MOUNT/$tdir.1 failed"
+ mkdir $MOUNT/$tdir.2 || error "mkdir $MOUNT/$tdir.2 failed"
+
+ local mdt_index1=$($LFS getdirstripe -i $MOUNT/$tdir.1)
+ local mdt_index2=$($LFS getdirstripe -i $MOUNT/$tdir.2)
+
+ [ $mdt_index1 -eq $mdt_index2 ] &&
+ error "directories are on the same MDT $mdt_index1=$mdt_index2"
+
+ rmdir $MOUNT/$tdir.1 $MOUNT/$tdir.2
+}
+run_test 0e "Enable DNE MDT balancing for mkdir in the ROOT"
+
test_1() {
test_mkdir $DIR/$tdir
test_mkdir $DIR/$tdir/d2
test_mkdir $DIR/$tdir
# Set default striping on directory
- $LFS setstripe -C 4 $DIR/$tdir
+ local setcount=4
+ local stripe_opt
+
+ # if we run against a 2.12 server which lacks overstring support
+ # then the connect_flag will not report overstriping, even if client
+ # is 2.14+
+ if [[ $($LCTL get_param mdc.*.connect_flags) =~ overstriping ]]; then
+ stripe_opt="-C $setcount"
+ elif (( $OSTCOUNT >= $setcount )); then
+ stripe_opt="-c $setcount"
+ else
+ skip "server does not support overstriping"
+ fi
+ $LFS setstripe $stripe_opt $DIR/$tdir
echo 1 > $DIR/$tdir/${tfile}.1
local count=$($LFS getstripe -c $DIR/$tdir/${tfile}.1)
- local setcount=4
[ $count -eq $setcount ] ||
error "(1) stripe count $count, should be $setcount"
# Clean up DOM layout
$LFS setstripe -d $DIR/$tdir
+ save_layout_restore_at_exit $MOUNT
# Now test that append striping works when layout is from root
$LFS setstripe -c 2 $MOUNT
# Make a special directory for this
mkdir $DIR/${tdir}/${tdir}.2
- stack_trap "$LFS setstripe -d $MOUNT" EXIT
# Verify for normal file
setcount=2
}
run_test 31q "create striped directory on specific MDTs"
+#LU-14949
+test_31r() {
+ touch $DIR/$tfile.target
+ touch $DIR/$tfile.source
+
+ #OBD_FAIL_LLITE_OPEN_DELAY 0x1419
+ $LCTL set_param fail_loc=0x1419 fail_val=3
+ cat $DIR/$tfile.target &
+ CATPID=$!
+
+ # Guarantee open is waiting before we get here
+ sleep 1
+ mv $DIR/$tfile.source $DIR/$tfile.target
+
+ wait $CATPID
+ RC=$?
+ if [[ $RC -ne 0 ]]; then
+ error "open with cat failed, rc=$RC"
+ fi
+}
+run_test 31r "open-rename(replace) race"
+
cleanup_test32_mount() {
local rc=0
trap 0
}
run_test 77m "Verify checksum_speed is correctly read"
+check_filefrag_77n() {
+ local nr_ext=0
+ local starts=()
+ local ends=()
+
+ while read extidx a b start end rest; do
+ if [[ "${extidx}" =~ ^[0-9]+: ]]; then
+ nr_ext=$(( $nr_ext + 1 ))
+ starts+=( ${start%..} )
+ ends+=( ${end%:} )
+ fi
+ done < <( filefrag -sv $1 )
+
+ [[ $nr_ext -eq 2 ]] && [[ "${starts[-1]}" == $(( ${ends[0]} + 1 )) ]] && return 0
+ return 1
+}
+
+test_77n() {
+ [[ "$CKSUM_TYPES" =~ t10 ]] || skip "no T10 checksum support on osc"
+
+ touch $DIR/$tfile
+ $TRUNCATE $DIR/$tfile 0
+ dd if=/dev/urandom of=$DIR/$tfile bs=4k conv=notrunc count=1 seek=0
+ dd if=/dev/urandom of=$DIR/$tfile bs=4k conv=notrunc count=1 seek=2
+ check_filefrag_77n $DIR/$tfile ||
+ skip "$tfile blocks not contiguous around hole"
+
+ set_checksums 1
+ stack_trap "set_checksums $ORIG_CSUM" EXIT
+ stack_trap "set_checksum_type $ORIG_CSUM_TYPE" EXIT
+ stack_trap "rm -f $DIR/$tfile"
+
+ for algo in $CKSUM_TYPES; do
+ if [[ "$algo" =~ ^t10 ]]; then
+ set_checksum_type $algo ||
+ error "fail to set checksum type $algo"
+ dd if=$DIR/$tfile of=/dev/null bs=12k count=1 iflag=direct ||
+ error "fail to read $tfile with $algo"
+ fi
+ done
+ rm -f $DIR/$tfile
+ return 0
+}
+run_test 77n "Verify read from a hole inside contiguous blocks with T10PI"
+
cleanup_test_78() {
trap 0
rm -f $DIR/$tfile
test_150c() {
check_set_fallocate_or_skip
+ local striping="-c2"
stack_trap "rm -f $DIR/$tfile; wait_delete_completed"
$LFS setstripe -c $OSTCOUNT -S1M $DIR/$tfile || error "setstripe failed"
fallocate -l ${OSTCOUNT}m $DIR/$tfile || error "fallocate failed"
- sync; sync_all_data
- cancel_lru_locks $OSC
- sleep 5
- bytes=$(($(stat -c '%b * %B' $DIR/$tfile)))
- want=$((OSTCOUNT * 1048576))
+ local bytes=$(($(stat -c '%b * %B' $DIR/$tfile)))
+ local want=$((OSTCOUNT * 1048576))
# Must allocate all requested space, not more than 5% extra
(( $bytes >= $want && $bytes < $want * 105 / 100 )) ||
error "bytes $bytes is not $want"
rm -f $DIR/$tfile
- # verify fallocate on PFL file
- $LFS setstripe -E1M -c1 -E16M -c3 -Eeof -c 4 $DIR/$tfile ||
+
+ echo "verify fallocate on PFL file"
+
+ [[ "x$DOM" == "xyes" ]] && striping="-L mdt"
+
+ $LFS setstripe -E1M $striping -E16M -c3 -Eeof -c 4 $DIR/$tfile ||
error "Create $DIR/$tfile failed"
- fallocate -l $((1048576 * 1024)) $DIR/$tfile ||
+ fallocate -l $((1048576 * 512)) $DIR/$tfile ||
error "fallocate failed"
- sync; sync_all_data
- cancel_lru_locks $OSC
- sleep 5
- local bytes=$(($(stat -c '%b * %B' $DIR/$tfile)))
- local want=$((1024 * 1048576))
+ bytes=$(($(stat -c '%b * %B' $DIR/$tfile)))
+ want=$((512 * 1048576))
# Must allocate all requested space, not more than 5% extra
(( $bytes >= $want && $bytes < $want * 105 / 100 )) ||
test_150d() {
check_set_fallocate_or_skip
+ local striping="-c2"
+
+ [[ "x$DOM" == "xyes" ]] && striping="-L mdt"
stack_trap "rm -f $DIR/$tfile; wait_delete_completed"
- $LFS setstripe -c $OSTCOUNT -S1M $DIR/$tdir || error "setstripe failed"
+ $LFS setstripe -E1M $striping -E eof -c $OSTCOUNT -S1M $DIR/$tdir ||
+ error "setstripe failed"
fallocate -o 1G -l ${OSTCOUNT}m $DIR/$tdir || error "fallocate failed"
- sync; sync_all_data
- cancel_lru_locks $OSC
- sleep 5
local bytes=$(($(stat -c '%b * %B' $DIR/$tdir)))
local want=$((OSTCOUNT * 1048576))
check_set_fallocate_or_skip
stack_trap "rm -f $DIR/$tfile; wait_delete_completed"
+ [[ "x$DOM" == "xyes" ]] &&
+ $LFS setstripe -E1M -L mdt -E eof $DIR/$tfile
+
echo "Verify fallocate punch: Range within the file range"
yes 'A' | dd of=$DIR/$tfile bs=4096 count=5 ||
error "dd failed for bs 4096 and count 5"
check_set_fallocate_or_skip
stack_trap "rm -f $DIR/$tfile; wait_delete_completed"
- $LFS setstripe -c${OSTCOUNT} $DIR/$tfile ||
- error "$LFS setstripe -c${OSTCOUNT} $DIR/$tfile failed"
+ if [[ "x$DOM" == "xyes" ]]; then
+ $LFS setstripe -E2M -L mdt -E eof -c${OSTCOUNT} $DIR/$tfile ||
+ error "$LFS setstripe DoM + ${OSTCOUNT} OST failed"
+ else
+ $LFS setstripe -c${OSTCOUNT} $DIR/$tfile ||
+ error "$LFS setstripe -c${OSTCOUNT} $DIR/$tfile failed"
+ fi
# Get 100MB per OST of the available space to reduce run time
# else 60% of the available space if we are running SLOW tests
# Create a user
changelog_register || error "changelog_register failed"
- # Delete a future user (expect fail)
local MDT0=$(facet_svc $SINGLEMDS)
- do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister "cl77"
- local rc=$?
+ local rc
+
+ # No user (expect fail)
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister
+ rc=$?
+ if [ $rc -eq 0 ]; then
+ error "Should fail without user"
+ elif [ $rc -ne 4 ]; then
+ error "changelog_deregister failed with $rc, expect 4(CMD_HELP)"
+ fi
+ # Delete a future user (expect fail)
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister "cl77"
+ rc=$?
if [ $rc -eq 0 ]; then
error "Deleted non-existant user cl77"
elif [ $rc -ne 2 ]; then
$MULTIOP $DIR/$tfile oO_CREAT:O_RDWR:eRE+eU || error "get lease error"
echo "==== test 2: verify lease can be broken by upcoming open"
- $MULTIOP $DIR/$tfile oO_RDONLY:eR_E-eUc &
+ $MULTIOP $DIR/$tfile oO_RDWR:eR_E-eUc &
local PID=$!
sleep 1
- $MULTIOP $DIR/$tfile oO_RDONLY:c
+ $MULTIOP $DIR/$tfile oO_RDWR:c
kill -USR1 $PID && wait $PID || error "break lease error"
echo "==== test 3: verify lease can't be granted if an open already exists"
- $MULTIOP $DIR/$tfile oO_RDONLY:_c &
+ $MULTIOP $DIR/$tfile oO_RDWR:_c &
local PID=$!
sleep 1
- $MULTIOP $DIR/$tfile oO_RDONLY:eReUc && error "apply lease should fail"
+ $MULTIOP $DIR/$tfile oO_RDWR:eReUc && error "apply lease should fail"
kill -USR1 $PID && wait $PID || error "open file error"
echo "==== test 4: lease can sustain over recovery"
- $MULTIOP $DIR/$tfile oO_RDONLY:eR_E+eUc &
+ $MULTIOP $DIR/$tfile oO_RDWR:eR_E+eUc &
PID=$!
sleep 1
kill -USR1 $PID && wait $PID || error "lease broken over recovery"
echo "==== test 5: lease broken can't be regained by replay"
- $MULTIOP $DIR/$tfile oO_RDONLY:eR_E-eUc &
+ $MULTIOP $DIR/$tfile oO_RDWR:eR_E-eUc &
PID=$!
sleep 1
}
run_test 413c "mkdir with default LMV max inherit rr"
+test_413d() {
+ (( MDSCOUNT >= 2 )) ||
+ skip "We need at least 2 MDTs for this test"
+
+ (( MDS1_VERSION >= $(version_code 2.14.51) )) ||
+ skip "Need server version at least 2.14.51"
+
+ local lmv_qos_threshold_rr
+
+ lmv_qos_threshold_rr=$($LCTL get_param -n lmv.*.qos_threshold_rr |
+ head -n1)
+ stack_trap "$LCTL set_param \
+ lmv.*.qos_threshold_rr=$lmv_qos_threshold_rr > /dev/null" EXIT
+
+ $LCTL set_param lmv.*.qos_threshold_rr=100 > /dev/null
+ mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
+ getfattr -d -m dmv -e hex $DIR/$tdir | grep dmv &&
+ error "$tdir shouldn't have default LMV"
+ createmany -d $DIR/$tdir/sub $((100 * MDSCOUNT)) ||
+ error "mkdir sub failed"
+
+ local count=$($LFS getstripe -m $DIR/$tdir/* | grep -c ^0)
+
+ (( count == 100 )) || error "$count subdirs on MDT0"
+}
+run_test 413d "inherit ROOT default LMV"
+
test_413z() {
local pids=""
local subdir
}
run_test 902 "test short write doesn't hang lustre"
+# LU-14711
+test_903() {
+ $LFS setstripe -i 0 -c 1 $DIR/$tfile $DIR/${tfile}-2
+ echo "blah" > $DIR/${tfile}-2
+ dd if=/dev/zero of=$DIR/$tfile bs=1M count=6 conv=fsync
+ #define OBD_FAIL_OSC_SLOW_PAGE_EVICT 0x417
+ $LCTL set_param fail_loc=0x417 fail_val=20
+
+ mv $DIR/${tfile}-2 $DIR/$tfile # Destroys the big object
+ sleep 1 # To start the destroy
+ wait_destroy_complete 150 || error "Destroy taking too long"
+ cat $DIR/$tfile > /dev/null || error "Evicted"
+}
+run_test 903 "Test long page discard does not cause evictions"
+
complete $SECONDS
[ -f $EXT2_DEV ] && rm $EXT2_DEV || true
check_and_cleanup_lustre