mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
xfstests: test extent size hints
This is an adapted version of the reproduced in OSS BZ #874, which shows file corruption when using the extent size hint. Signed-off-by: Geoffrey Wehrman <gwehrman@sgi.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
#! /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 <gwehrman@sgi.com>.
|
||||
#
|
||||
#-----------------------------------------------------------------------
|
||||
# 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
|
||||
#
|
||||
#-----------------------------------------------------------------------
|
||||
#
|
||||
# creator
|
||||
owner=hch@lst.de
|
||||
|
||||
seq=`basename $0`
|
||||
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 generic
|
||||
_supported_os Linux
|
||||
|
||||
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
|
||||
@@ -0,0 +1,4 @@
|
||||
QA output created by 229
|
||||
generating 10 files
|
||||
comparing files
|
||||
got 0 errors
|
||||
@@ -342,3 +342,4 @@ deprecated
|
||||
226 auto enospc
|
||||
227 auto fsr
|
||||
228 rw auto prealloc quick
|
||||
229 auto rw
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ TARGETS = dirstress fill fill2 getpagesize holes lstat64 \
|
||||
mmapcat append_reader append_writer dirperf metaperf \
|
||||
devzero feature alloc fault fstest t_access_root \
|
||||
godown resvtest writemod makeextents itrash rename \
|
||||
multi_open_unlink dmiperf unwritten_sync genhashnames
|
||||
multi_open_unlink dmiperf unwritten_sync genhashnames t_holes
|
||||
|
||||
LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \
|
||||
preallo_rw_pattern_writer ftrunc trunc fs_perms testx looptest \
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int buf[1024];
|
||||
int fd, i, j;
|
||||
|
||||
fd = open(argv[1], O_RDWR|O_CREAT, 0666);
|
||||
for (i = 1; i < 9100; i++) {
|
||||
for (j = 0; j < 1024; j++)
|
||||
buf[j] = i | i << 5;
|
||||
|
||||
if (write(fd,buf,253*4*sizeof(int))!= 253*4*sizeof(int))
|
||||
printf("Write did not return correct amount\n");
|
||||
|
||||
if ((i % 9) == 0 && i < 9001)
|
||||
lseek(fd, 4096 * 110,SEEK_CUR);
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user