#! /bin/bash # FS QA Test No. 221 # # Check for file corruption when using the extent size hint on # the normal data subvolume. # # http://oss.sgi.com/bugzilla/show_bug.cgi?id=874 # # Based on a bug report and testcase from Geoffrey Wehrman . # #----------------------------------------------------------------------- # Copyright (c) 2010 Christoph Hellwig. All Rights Reserved. # Copyright (c) 2010 Silicon Graphics, Inc. All Rights Reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation. # # This program is distributed in the hope that it would be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # #----------------------------------------------------------------------- # seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! _cleanup() { rm -rf ${TDIR} } trap "_cleanup ; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common/rc # real QA test starts here _supported_fs xfs _supported_os Linux _require_test TDIR="${TEST_DIR}/t_holes" NFILES="10" EXTSIZE="256k" # Create the test directory mkdir ${TDIR} # Set the test directory extsize xfs_io -c "extsize ${EXTSIZE}" ${TDIR} # Create a set of holey files echo "generating ${NFILES} files" for i in $(seq 0 ${NFILES}); do $here/src/t_holes ${TDIR}/${i} done # Compare the files echo "comparing files" errcnt=0 j=0 for i in $(seq 0 ${NFILES}); do let j=$i+1 while [ ${j} -lt ${NFILES} ] ; do if ! cmp ${TDIR}/${i} ${TDIR}/${j} ; then let errcnt=$errcnt+1 fi let j=$j+1 done done echo "got ${errcnt} errors" status=$errcnt exit $status