X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Ftest-framework.sh;h=7c25003fe88f40de0f9d20323edfc568139bc8a3;hp=22d914c287f55ea17acf41756c3cfb613c3de40d;hb=e3a4dc406f6d429f5535cb8d3a86004991c61b26;hpb=bc2d7f065af6b4f9a69bc7d3d250b948b33a1018;ds=sidebyside diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index 22d914c..7c25003 100755 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -156,14 +156,15 @@ print_summary () { # output: No return values, environment variables are exported get_lustre_env() { + if ! $RPC_MODE; then + export mds1_FSTYPE=${mds1_FSTYPE:-$(facet_fstype mds1)} + export ost1_FSTYPE=${ost1_FSTYPE:-$(facet_fstype ost1)} - export mds1_FSTYPE=${mds1_FSTYPE:-$(facet_fstype mds1)} - export ost1_FSTYPE=${ost1_FSTYPE:-$(facet_fstype ost1)} - - export MGS_VERSION=$(lustre_version_code mgs) - export MDS1_VERSION=$(lustre_version_code mds1) - export OST1_VERSION=$(lustre_version_code ost1) - export CLIENT_VERSION=$(lustre_version_code client) + export MGS_VERSION=$(lustre_version_code mgs) + export MDS1_VERSION=$(lustre_version_code mds1) + export OST1_VERSION=$(lustre_version_code ost1) + export CLIENT_VERSION=$(lustre_version_code client) + fi # Prefer using "mds1" directly instead of SINGLEMDS. # Keep this for compat until it is removed from scripts. @@ -433,6 +434,7 @@ init_test_env() { export LOV_MAX_STRIPE_COUNT=2000 export DELETE_OLD_POOLS=${DELETE_OLD_POOLS:-false} export KEEP_POOLS=${KEEP_POOLS:-false} + export PARALLEL=${PARALLEL:-"no"} export MACHINEFILE=${MACHINEFILE:-$TMP/$(basename $0 .sh).machines} . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} @@ -466,7 +468,7 @@ check_cpt_number() { # code is useful for comparison two version strings to see which is newer. version_code() { # split arguments like "1.8.6-wc3" into "1", "8", "6", "3" - eval set -- $(tr "[:punct:][a-z]" " " <<< $*) + eval set -- $(tr "[:punct:][a-zA-Z]" " " <<< $*) echo -n $(((${1:-0}<<24) | (${2:-0}<<16) | (${3:-0}<<8) | (${4:-0}))) } @@ -676,22 +678,13 @@ load_module() { fi } -load_modules_local() { - if [ -n "$MODPROBE" ]; then - # use modprobe - echo "Using modprobe to load modules" - return 0 - fi - - # Create special udev test rules on every node - if [ -f $LUSTRE/lustre/conf/99-lustre.rules ]; then { - sed -e 's|/usr/sbin/lctl|$LCTL|g' $LUSTRE/lustre/conf/99-lustre.rules > /etc/udev/rules.d/99-lustre-test.rules - } else { - echo "SUBSYSTEM==\"lustre\", ACTION==\"change\", ENV{PARAM}==\"?*\", RUN+=\"$LCTL set_param '\$env{PARAM}=\$env{SETTING}'\"" > /etc/udev/rules.d/99-lustre-test.rules - } fi - udevadm control --reload-rules - udevadm trigger +do_lnetctl() { + $LCTL mark "$LNETCTL $*" + echo "$LNETCTL $*" + $LNETCTL "$@" +} +load_lnet() { # For kmemleak-enabled kernels we need clear all past state # that obviously has nothing to do with this Lustre run # Disable automatic memory scanning to avoid perf hit. @@ -735,25 +728,56 @@ load_modules_local() { load_module ../libcfs/libcfs/libcfs # Prevent local MODOPTS_LIBCFS being passed as part of environment # variable to remote nodes - MODOPTS_LIBCFS=$saved_opts + unset MODOPTS_LIBCFS - set_default_debug - load_module ../lnet/lnet/lnet + set_default_debug "neterror net nettrace malloc" + if [ "$1" = "config_on_load=1" ]; then + load_module ../lnet/lnet/lnet + else + load_module ../lnet/lnet/lnet "$@" + fi LNDPATH=${LNDPATH:-"../lnet/klnds"} if [ -z "$LNETLND" ]; then case $NETTYPE in - o2ib*) LNETLND="o2iblnd/ko2iblnd" ;; - tcp*) LNETLND="socklnd/ksocklnd" ;; - *) local lnd="${NETTYPE%%[0-9]}lnd" + o2ib*) LNETLND="o2iblnd/ko2iblnd" ;; + tcp*) LNETLND="socklnd/ksocklnd" ;; + *) local lnd="${NETTYPE%%[0-9]}lnd" [ -f "$LNDPATH/$lnd/k$lnd.ko" ] && LNETLND="$lnd/k$lnd" || LNETLND="socklnd/ksocklnd" esac fi load_module ../lnet/klnds/$LNETLND + + if [ "$1" = "config_on_load=1" ]; then + do_lnetctl lnet configure --all || + return $? + fi +} + +load_modules_local() { + if [ -n "$MODPROBE" ]; then + # use modprobe + echo "Using modprobe to load modules" + return 0 + fi + + # Create special udev test rules on every node + if [ -f $LUSTRE/lustre/conf/99-lustre.rules ]; then { + sed -e 's|/usr/sbin/lctl|$LCTL|g' $LUSTRE/lustre/conf/99-lustre.rules > /etc/udev/rules.d/99-lustre-test.rules + } else { + echo "SUBSYSTEM==\"lustre\", ACTION==\"change\", ENV{PARAM}==\"?*\", RUN+=\"$LCTL set_param '\$env{PARAM}=\$env{SETTING}'\"" > /etc/udev/rules.d/99-lustre-test.rules + } fi + udevadm control --reload-rules + udevadm trigger + + load_lnet + load_module obdclass/obdclass - MODOPTS_PTLRPC=${MODOPTS_PTLRPC:-"lbug_on_grant_miscount=1"} + if ! client_only; then + MODOPTS_PTLRPC=${MODOPTS_PTLRPC:-"lbug_on_grant_miscount=1"} + fi load_module ptlrpc/ptlrpc load_module ptlrpc/gss/ptlrpc_gss load_module fld/fld @@ -1679,9 +1703,17 @@ set_hostid () { mount_facets () { local facets=${1:-$(get_facets)} local facet + local -a mountpids + local total=0 + local ret=0 for facet in ${facets//,/ }; do - mount_facet $facet + mount_facet $facet & + mountpids[total]=$! + total=$((total+1)) + done + for ((index=0; index<$total; index++)); do + wait ${mountpids[index]} local RC=$? [ $RC -eq 0 ] && continue @@ -1691,8 +1723,9 @@ mount_facets () { else error "Restart of $facet failed!" fi - return $RC + ret=$RC done + return $ret } # @@ -2423,16 +2456,16 @@ zconf_umount() { # Mount the file system on the MDS mount_mds_client() { - local mds_HOST=${SINGLEMDS}_HOST - echo $mds_HOST - zconf_mount $mds1_HOST $MOUNT2 $MOUNT_OPTS || - error "unable to mount $MOUNT2 on MDS" + local host=$(facet_active_host $SINGLEMDS) + echo $host + zconf_mount $host $MOUNT2 $MOUNT_OPTS || + error "unable to mount $MOUNT2 on $host" } # Unmount the file system on the MDS umount_mds_client() { - local mds_HOST=${SINGLEMDS}_HOST - zconf_umount $mds1_HOST $MOUNT2 + local host=$(facet_active_host $SINGLEMDS) + zconf_umount $host $MOUNT2 do_facet $SINGLEMDS "rmdir $MOUNT2" } @@ -3561,20 +3594,15 @@ wait_remote_prog () { lfs_df_check() { local clients=${1:-$CLIENTS} - local rc + local rc=0 if [ -z "$clients" ]; then - $LFS df $MOUNT > /dev/null - rc=$? + $LFS df $MOUNT > /dev/null || rc=$? else - $PDSH $clients "$LFS df $MOUNT" > /dev/null - rc=$? + $PDSH $clients "$LFS df $MOUNT" > /dev/null || rc=$? fi check_lfs_df_ret_val $rc - rc=$? - - return $rc } clients_up() { @@ -3587,8 +3615,10 @@ all_mds_up() { (( MDSCOUNT == 1 )) && return # wait so that statfs data on MDT expire - local delay=$(do_facet $SINGLEMDS lctl \ - get_param -n osp.*MDT0000*MDT0001.maxage) + local delay=$(do_facet mds1 $LCTL \ + get_param -n osp.*MDT*MDT0000.maxage | sort -n | tail -1) + + [ -n "$delay" ] || error "fail to get maxage" sleep $delay local nodes=$(comma_list $(mdts_nodes)) # initiate statfs RPC, all to all MDTs @@ -3665,7 +3695,7 @@ facet_failover() { skip=0 #check whether facet has been included in other affected facets for ((index=0; index<$total; index++)); do - [[ *,$facet,* == ,${affecteds[index]}, ]] && skip=1 + [[ ,${affecteds[index]}, == *,$facet,* ]] && skip=1 done if [ $skip -eq 0 ]; then @@ -3681,18 +3711,52 @@ facet_failover() { shutdown_facet $facet done - $E2FSCK_ON_MDT0 && (run_e2fsck $(facet_active_host $SINGLEMDS) \ - $(mdsdevname 1) "-n" || error "Running e2fsck") + echo "$(date +'%H:%M:%S (%s)') shut down" - for ((index=0; index<$total; index++)); do - facet=$(echo ${affecteds[index]} | tr -s " " | cut -d"," -f 1) - echo reboot facets: ${affecteds[index]} + local hostlist + local waithostlist + + for facet in ${facets//,/ }; do + local host=$(facet_active_host $facet) + + hostlist=$(expand_list $hostlist $host) + if [ $(facet_host $facet) = \ + $(facet_failover_host $facet) ]; then + waithostlist=$(expand_list $waithostlist $host) + fi + done - reboot_facet $facet $sleep_time + if [ "$FAILURE_MODE" = HARD ]; then + for host in ${hostlist//,/ }; do + reboot_node $host + done + echo "$(date +'%H:%M:%S (%s)') $hostlist rebooted" + # We need to wait the rebooted hosts in case if + # facet_HOST == facetfailover_HOST + if ! [ -z "$waithostlist" ]; then + wait_for_host $waithostlist + if $LOAD_MODULES_REMOTE; then + echo "loading modules on $waithostlist" + do_rpc_nodes $waithostlist load_modules_local + fi + fi + else + sleep 10 + fi - change_active ${affecteds[index]} + if [[ " ${affecteds[@]} " =~ " $SINGLEMDS " ]]; then + change_active $SINGLEMDS + fi - wait_for_facet ${affecteds[index]} + $E2FSCK_ON_MDT0 && (run_e2fsck $(facet_active_host $SINGLEMDS) \ + $(facet_device $SINGLEMDS) "-n" || error "Running e2fsck") + + local -a mountpids + + for ((index=0; index<$total; index++)); do + if [[ ${affecteds[index]} != $SINGLEMDS ]]; then + change_active ${affecteds[index]} + fi if $GSS_SK; then init_gss init_facets_vars_simple @@ -3704,11 +3768,17 @@ facet_failover() { affecteds[index]=$(exclude_items_from_list \ ${affecteds[index]} mgs) fi - # FIXME; has to be changed to mount all facets concurrently if [ -n "${affecteds[index]}" ]; then echo mount facets: ${affecteds[index]} - mount_facets ${affecteds[index]} + mount_facets ${affecteds[index]} & + mountpids[index]=$! + fi + done + for ((index=0; index<$total; index++)); do + if [ -n "${affecteds[index]}" ]; then + wait ${mountpids[index]} fi + if $GSS_SK; then do_nodes $(comma_list $(all_nodes)) \ "keyctl show | grep lustre | cut -c1-11 | @@ -3716,6 +3786,20 @@ facet_failover() { xargs -IX keyctl setperm X 0x3f3f3f3f" fi done + echo "$(date +'%H:%M:%S (%s)') targets are mounted" + + if [ "$FAILURE_MODE" = HARD ]; then + hostlist=$(exclude_items_from_list $hostlist $waithostlist) + if ! [ -z "$hostlist" ]; then + wait_for_host $hostlist + if $LOAD_MODULES_REMOTE; then + echo "loading modules on $hostlist" + do_rpc_nodes $hostlist load_modules_local + fi + fi + fi + + echo "$(date +'%H:%M:%S (%s)') facet_failover done" } replay_barrier() { @@ -4016,9 +4100,8 @@ facet_failover_host() { fi if combined_mgs_mds && [ $facet == "mgs" ] && - [ -z $mds1failover_HOST ]; then - temp=mds1failover_HOST - echo ${!temp} + [ -n "$mds1failover_HOST" ]; then + echo $mds1failover_HOST return fi @@ -4159,6 +4242,36 @@ do_node() { return ${PIPESTATUS[0]} } +## +# Execute exact command line on host +# +# The \a host may be on a local or remote node, which is determined at +# the time the command is run. Does careful argument quotation to +# ensure that the exact command line is executed without any globbing, +# substitution, or shell interpretation on the remote side. Does not +# support --verbose or --quiet. Does not include "$host: " prefixes on +# output. See also do_facet_vp(). +# +# usage: do_node_vp "$host" "$command" "$arg"... +do_node_vp() { + local host="$1" + shift + + if [[ "$host" == "$HOSTNAME" ]]; then + sh -c "$(printf -- ' %q' "$@")" + return $? + fi + + if [[ "${PDSH}" != *pdsh* || "${PDSH}" != *-S* ]]; then + echo "cannot run '$*' on host '${host}' with PDSH='${PDSH}'" >&2 + return 128 + fi + + # -N Disable hostname: prefix on lines of output. + + $PDSH "${host}" -N "cd $RPWD; PATH=\$PATH:$RLUSTRE/utils:$RLUSTRE/tests:/sbin:/usr/sbin; export LUSTRE=$RLUSTRE; $(printf -- ' %q' "$@")" +} + single_local_node () { [ "$1" = "$HOSTNAME" ] } @@ -4266,6 +4379,30 @@ do_facet() { do_node $verbose $quiet $host "$@" } +## +# Execute exact command line on the host of a facet +# +# The \a facet (service) may be on a local or remote node, which is +# determined at the time the command is run. Does careful argument +# quotation to ensure that the exact command line is executed without +# any globbing, substitution, or shell interpretation on the remote +# side. Does not support --verbose or --quiet. Does not include +# "$host: " prefixes on output. +# +# usage: do_facet_vp "$facet" "$command" "$arg"... +do_facet_vp() { + local facet="$1" + local host=$(facet_active_host "$facet") + shift + + if [[ -z "$host" ]]; then + echo "no host defined for facet ${facet}" >&2 + exit 1 + fi + + do_node_vp "$host" "$@" +} + # Function: do_facet_random_file $FACET $FILE $SIZE # Creates FILE with random content on the given FACET of given SIZE @@ -4581,6 +4718,7 @@ stopall() { # The add fn does rm ${facet}active file, this would be enough # if we use do_facet only after the facet added, but # currently we use do_facet mds in local.sh + local num for num in `seq $MDSCOUNT`; do stop mds$num -f rm -f ${TMP}/mds${num}active @@ -4715,14 +4853,11 @@ mkfs_opts() { opts+=${LDLM_TIMEOUT:+" --param=sys.ldlm_timeout=$LDLM_TIMEOUT"} if [ $type == MDS ]; then - opts+=${MDSCAPA:+" --param-mdt.capa=$MDSCAPA"} opts+=${DEF_STRIPE_SIZE:+" --param=lov.stripesize=$DEF_STRIPE_SIZE"} opts+=${DEF_STRIPE_COUNT:+" --param=lov.stripecount=$DEF_STRIPE_COUNT"} opts+=${L_GETIDENTITY:+" --param=mdt.identity_upcall=$L_GETIDENTITY"} if [ $fstype == ldiskfs ]; then - fs_mkfs_opts+="-O ea_inode,large_dir" - var=${facet}_JRN if [ -n "${!var}" ]; then fs_mkfs_opts+=" -J device=${!var}" @@ -4734,8 +4869,6 @@ mkfs_opts() { fi if [ $type == OST ]; then - opts+=${OSSCAPA:+" --param=ost.capa=$OSSCAPA"} - if [ $fstype == ldiskfs ]; then var=${facet}_JRN if [ -n "${!var}" ]; then @@ -6454,6 +6587,37 @@ skip() { exit 0 } +# +# For interop testing treate EOPNOTSUPP as success +# and skip +# +skip_eopnotsupp() { + local retstr=$@ + + echo $retstr | awk -F'|' '{print $1}' | + grep -E unsupported\|"(Operation not supported)" + (( $? == 0 )) || error "$retstr" + skip $retstr +} + +# Add a list of tests to ALWAYS_EXCEPT due to an issue. +# Usage: always_except LU-4815 23 42q ... +# +function always_except() { + local issue="${1:-}" # single jira style issue ("LU-4815") + local test_num + + shift + + if ! [[ "$issue" =~ ^[[:upper:]]+-[[:digit:]]+$ ]]; then + error "always_except: invalid issue '$issue' for tests '$*'" + fi + + for test_num in "$@"; do + ALWAYS_EXCEPT+=" $test_num" + done +} + build_test_filter() { EXCEPT="$EXCEPT $(testslist_filter)" @@ -6590,6 +6754,7 @@ log() { local MSG="$*" # Get rid of ' MSG=${MSG//\'/\\\'} + MSG=${MSG//\*/\\\*} MSG=${MSG//\(/\\\(} MSG=${MSG//\)/\\\)} MSG=${MSG//\;/\\\;} @@ -6912,6 +7077,33 @@ local_addr_list() { ip addr | awk '/inet / {print $2}' | awk -F/ '{print $1}' } +# Description: +# Returns list of interfaces configured for LNet +lnet_if_list() { + local nids=( $($LCTL list_nids | xargs echo) ) + + [[ -z ${nids[@]} ]] && + return 0 + + declare -a INTERFACES + + for ((i = 0; i < ${#nids[@]}; i++)); do + ip=$(sed 's/^\(.*\)@.*$/\1/'<<<${nids[i]}) + INTERFACES[i]=$(ip -o a s | + awk '$4 ~ /^'$ip'\//{print $2}') + INTERFACES=($(echo "${INTERFACES[@]}" | tr ' ' '\n' | uniq | tr '\n' ' ')) + if [[ -z ${INTERFACES[i]} ]]; then + error "Can't determine interface name for NID ${nids[i]}" + elif [[ 1 -ne $(wc -w <<<${INTERFACES[i]}) ]]; then + error "Found $(wc -w <<<${INTERFACES[i]}) interfaces for NID ${nids[i]}. Expect 1" + fi + done + + echo "${INTERFACES[@]}" + + return 0 +} + is_local_addr() { local addr=$1 # Cache address list to avoid mutiple execution of local_addr_list @@ -7130,20 +7322,23 @@ init_clients_lists () { # Sanity check: exclude the dup entries RCLIENTS=$(for i in ${rclients//,/ }; do echo $i; done | sort -u) - clients="$SINGLECLIENT $HOSTNAME $RCLIENTS" + export CLIENT1=${CLIENT1:-$HOSTNAME} + export SINGLECLIENT=$CLIENT1 + + clients="$SINGLECLIENT $HOSTNAME $RCLIENTS" # Sanity check: exclude the dup entries from CLIENTS # for those configs which has SINGLCLIENT set to local client clients=$(for i in $clients; do echo $i; done | sort -u) - CLIENTS=$(comma_list $clients) + export CLIENTS=$(comma_list $clients) local -a remoteclients=($RCLIENTS) for ((i=0; $i<${#remoteclients[@]}; i++)); do varname=CLIENT$((i + 2)) - eval $varname=${remoteclients[i]} + eval export $varname=${remoteclients[i]} done - CLIENTCOUNT=$((${#remoteclients[@]} + 1)) + export CLIENTCOUNT=$((${#remoteclients[@]} + 1)) } get_random_entry () { @@ -7401,6 +7596,29 @@ calc_osc_kbytes () { $LCTL get_param -n osc.*[oO][sS][cC][-_][0-9a-f]*.$1 | calc_sum } +free_min_max () { + wait_delete_completed + AVAIL=($(lctl get_param -n osc.*[oO][sS][cC]-[^M]*.kbytesavail)) + echo "OST kbytes available: ${AVAIL[*]}" + MAXV=${AVAIL[0]} + MAXI=0 + MINV=${AVAIL[0]} + MINI=0 + for ((i = 0; i < ${#AVAIL[@]}; i++)); do + #echo OST $i: ${AVAIL[i]}kb + if [[ ${AVAIL[i]} -gt $MAXV ]]; then + MAXV=${AVAIL[i]} + MAXI=$i + fi + if [[ ${AVAIL[i]} -lt $MINV ]]; then + MINV=${AVAIL[i]} + MINI=$i + fi + done + echo "Min free space: OST $MINI: $MINV" + echo "Max free space: OST $MAXI: $MAXV" +} + # save_lustre_params(comma separated facet list, parameter_mask) # generate a stream of formatted strings ( =) save_lustre_params() { @@ -7440,7 +7658,7 @@ check_node_health() { # Only check/report network health if get_param isn't reported, since # *clearly* the network is working if get_param returned something. if (( $(grep -c catastro $health) != $(wc -w <<< ${nodes//,/ }) )); then - for node in ${nodes//,/}; do + for node in ${nodes//,/ }; do check_network $node 5 done fi @@ -7745,6 +7963,10 @@ get_clientmgc_proc_path() { } do_rpc_nodes () { + local quiet + + [[ "$1" == "--quiet" || "$1" == "-q" ]] && quiet="$1" && shift + local list=$1 shift @@ -7754,7 +7976,7 @@ do_rpc_nodes () { local LIBPATH="/usr/lib/lustre/tests:/usr/lib64/lustre/tests:" local TESTPATH="$RLUSTRE/tests:" local RPATH="PATH=${TESTPATH}${LIBPATH}${PATH}:/sbin:/bin:/usr/sbin:" - do_nodesv $list "${RPATH} NAME=${NAME} bash rpc.sh $@ " + do_nodes ${quiet:-"--verbose"} $list "${RPATH} NAME=${NAME} bash rpc.sh $@ " } wait_clients_import_state () { @@ -7764,7 +7986,9 @@ wait_clients_import_state () { local facets="$facet" if [ "$FAILURE_MODE" = HARD ]; then - facets=$(facets_on_host $(facet_active_host $facet)) + facets=$(for f in ${facet//,/ }; do + facets_on_host $(facet_active_host $f) | tr "," "\n" + done | sort -u | paste -sd , ) fi for facet in ${facets//,/ }; do @@ -8579,36 +8803,34 @@ log_sub_test_end() { run_llverdev() { - local dev=$1 - local llverdev_opts=$2 - local devname=$(basename $1) - local size=$(grep "$devname"$ /proc/partitions | awk '{print $3}') - # loop devices aren't in /proc/partitions - [ "x$size" == "x" ] && local size=$(ls -l $dev | awk '{print $5}') + local dev=$1; shift + local llverdev_opts="$*" + local devname=$(basename $dev) + local size=$(awk "/$devname$/ {print \$3}" /proc/partitions) + # loop devices aren't in /proc/partitions + [[ -z "$size" ]] && size=$(stat -c %s $dev) - size=$(($size / 1024 / 1024)) # Gb + local size_gb=$((size / 1024 / 1024)) # Gb - local partial_arg="" - # Run in partial (fast) mode if the size - # of a partition > 1 GB - [ $size -gt 1 ] && partial_arg="-p" + local partial_arg="" + # Run in partial (fast) mode if the size of a partition > 1 GB + (( $size == 0 || $size_gb > 1 )) && partial_arg="-p" - llverdev --force $partial_arg $llverdev_opts $dev + llverdev --force $partial_arg $llverdev_opts $dev } run_llverfs() { - local dir=$1 - local llverfs_opts=$2 - local use_partial_arg=$3 - local partial_arg="" - local size=$(df -B G $dir |tail -n 1 |awk '{print $2}' |sed 's/G//') #GB + local dir=$1 + local llverfs_opts=$2 + local use_partial_arg=$3 + local partial_arg="" + local size=$(df -B G $dir |tail -n 1 |awk '{print $2}' |sed 's/G//') #GB - # Run in partial (fast) mode if the size - # of a partition > 1 GB - [ "x$use_partial_arg" != "xno" ] && [ $size -gt 1 ] && partial_arg="-p" + # Run in partial (fast) mode if the size of a partition > 1 GB + [ "x$use_partial_arg" != "xno" ] && [ $size -gt 1 ] && partial_arg="-p" - llverfs $partial_arg $llverfs_opts $dir + llverfs $partial_arg $llverfs_opts $dir } run_sgpdd () { @@ -8852,6 +9074,9 @@ test_mkdir() { local dirstripe_index=${DIRSTRIPE_INDEX:-$((base % $MDSCOUNT))} local OPTIND=1 + (( $MDS1_VERSION > $(version_code 2.15.0) )) && + hash_name+=("crush2") + while getopts "c:H:i:p" opt; do case $opt in c) dirstripe_count=$OPTARG;; @@ -10536,33 +10761,31 @@ statx_supported() { # function createmany() { local count=${!#} + local rc - (( count > 100 )) && { - local saved_debug=$($LCTL get_param -n debug) - local list=$(comma_list $(all_nodes)) - - do_nodes $list $LCTL set_param -n debug=0 - } + if (( count > 100 )); then + debugsave + do_nodes $(comma_list $(all_nodes)) $LCTL set_param -n debug=0 + fi $LUSTRE/tests/createmany $* - local rc=$? - (( count > 100 )) && - do_nodes $list "$LCTL set_param -n debug=\\\"$saved_debug\\\"" + rc=$? + debugrestore + return $rc } function unlinkmany() { local count=${!#} + local rc - (( count > 100 )) && { - local saved_debug=$($LCTL get_param -n debug) - local list=$(comma_list $(all_nodes)) - - do_nodes $list $LCTL set_param -n debug=0 - } + if (( count > 100 )); then + debugsave + do_nodes $(comma_list $(all_nodes)) $LCTL set_param -n debug=0 + fi $LUSTRE/tests/unlinkmany $* - local rc=$? - (( count > 100 )) && - do_nodes $list "$LCTL set_param -n debug=\\\"$saved_debug\\\"" + rc=$? + debugrestore + return $rc }