Index: projects/zfsd/head/tests/sys/cddl/zfs/tests/scrub_mirror/default.cfg =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/scrub_mirror/default.cfg (revision 322067) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/scrub_mirror/default.cfg (revision 322068) @@ -1,53 +1,54 @@ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "@(#)default.cfg 1.3 08/08/15 SMI" # typeset -i NUMBER_OF_DISKS=0 for i in $DISKS; do [[ -n $MIRROR_PRIMARY ]] && MIRROR_SECONDARY=$i [[ -z $MIRROR_PRIMARY ]] && MIRROR_PRIMARY=$i done if [[ -z $MIRROR_SECONDARY ]]; then # We need to repartition the single disk to two partitions SINGLE_DISK=$MIRROR_PRIMARY MIRROR_SECONDARY=$MIRROR_PRIMARY SIDE_PRIMARY=${SINGLE_DISK}p1 SIDE_SECONDARY=${SINGLE_DISK}p2 else SIDE_PRIMARY=${MIRROR_PRIMARY}p1 SIDE_SECONDARY=${MIRROR_SECONDARY}p1 fi export MIRROR_PRIMARY MIRROR_SECONDARY SINGLE_DISK SIDE_PRIMARY SIDE_SECONDARY export FILE_COUNT=30 export FILE_SIZE=$(( 1024 * 1024 )) export MIRROR_MEGS=70 export MIRROR_SIZE=${MIRROR_MEGS}m # default mirror size export BLOCKSZ=$(( 64 * 1024 )) export WRITE_COUNT=$(( MIRROR_MEGS * 1024 * 1024 / BLOCKSZ )) +export TESTFILE=testfile${TESTCASE_ID} Index: projects/zfsd/head/tests/sys/cddl/zfs/tests/scrub_mirror/scrub_mirror_common.kshlib =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/scrub_mirror/scrub_mirror_common.kshlib (revision 322067) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/scrub_mirror/scrub_mirror_common.kshlib (revision 322068) @@ -1,77 +1,80 @@ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "@(#)scrub_mirror_common.kshlib 1.5 07/10/09 SMI" # function overwrite_verify_mirror { typeset POOL=$1 typeset AFFECTED_DEVICE=$2 typeset OVERWRITING_DEVICE=$3 typeset atfile=0 set -A files set -A cksums set -A newcksums - fill_fs $TESTDIR $FILE_COUNT $BLOCKSZ $WRITE_COUNT - while (( atfile < FILE_COUNT )); do - cksums[$atfile]=$($CKSUM ${TESTDIR}/${TESTFILE}.${i}) - (( atfile = atfile + 1 )) + fill_fs $TESTDIR -1 $FILE_COUNT $BLOCKSZ $WRITE_COUNT + while [ "$atfile" -lt "$FILE_COUNT" ]; do + if [ -f ${TESTDIR}/0/${TESTFILE}.${atfile} ]; then + cksums[$atfile]=$($CKSUM ${TESTDIR}/0/${TESTFILE}.${atfile}) + fi + (( atfile = $atfile + 1 )) done # unmount and export before dd - log_must $UMOUNT $TESTDIR log_must $ZPOOL export $POOL # dd the affected side of the mirror log_must $DD if=$OVERWRITING_DEVICE of=$(bsddevmap $AFFECTED_DEVICE) \ seek=8 bs=$BLOCKSZ count=$(( WRITE_COUNT - 8 )) conv=notrunc # now remount and scrub log_must $ZPOOL import $POOL log_must $ZPOOL scrub $POOL wait_for 60 1 is_pool_scrubbed $POOL atfile=0 typeset -i failedcount=0 - while (( atfile < FILE_COUNT )); do - newcksum=$($CKSUM $TESTDIR/${TESTFILE}.${i}) - if [[ $newcksum != ${cksums[$atfile]} ]]; then - (( failedcount = failedcount + 1 )) - else - log_note "${TESTFILE}.${i} checksums match:"\ - "old ${cksums[$atfile]} new $newcksum" + while [ "$atfile" -lt "$FILE_COUNT" ]; do + if [ -f ${TESTDIR}/0/${TESTFILE}.${atfile} ]; then + newcksum=$($CKSUM $TESTDIR/0/${TESTFILE}.${atfile}) + if [[ $newcksum != ${cksums[$atfile]} ]]; then + (( failedcount = $failedcount + 1 )) + else + log_note "${TESTFILE}.${atfile} checksums match:"\ + "old ${cksums[$atfile]} new $newcksum" + fi + $RM -f ${files[$atfile]} fi - $RM -f ${files[$atfile]} - (( atfile = atfile + 1 )) + (( atfile = $atfile + 1 )) done - if (( $failedcount > 0 )); then + if [ "$failedcount" -gt 0 ]; then log_fail "of the $FILE_COUNT files $failedcount did not " \ "have the same checksum before and after." fi }