----- "Eric Sandeen" <sandeen@xxxxxxxxxx> wrote: > From: Lachlan McIlroy <lmcilory@xxxxxxxxxx> lmcilroy - although I was briefly known as lmcilory due a HR error. Eric, the test looks good to me, thanks for fixing the errors in it. > > A customer reported a problem: > > If a process is using mmap to write to a file on an > ext4 filesystem while another process is using direct > I/O to write to the same file the first thread may > receive a SIGBUS during a page fault. > > A SIGBUS occurs if the page fault tries to access a > page that is entirely beyond the end of the file but > in this test case that should not be happening. > > Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > > #! /bin/bash > # FS QA Test No. 246 > # > # Test for race between direct I/O and mmap > # > #----------------------------------------------------------------------- > # Copyright (c) 2010 Red Hat, 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=lmcilroy@xxxxxxxxxx > > seq=`basename $0` > echo "QA output created by $seq" > > here=`pwd` > tmp=/tmp/$$ > status=1 # failure is the default! > trap "_cleanup; exit \$status" 0 1 2 3 7 15 > > _cleanup() > { > cd / > rm -f $tmp.* $testfile > wait > } > > # get standard environment, filters and checks > . ./common.rc > . ./common.filter > > # real QA test starts here > > # Modify as appropriate. > _supported_fs generic > _supported_os Linux > > testfile=$TEST_DIR/$seq.$$ > > loops=500 > iosize=1048576 > > # Initialise file > dd if=/dev/zero of=$testfile bs=$iosize count=$loops &> /dev/null > [ $? -ne 0 ] && exit > sync > > # Direct I/O overwriter > dd if=/dev/zero of=$testfile oflag=direct bs=$iosize count=$loops > conv=notrunc &> /dev/null & > [ $? -ne 0 ] && exit > > # Mmap writer > start=`expr $loops - 1` > for i in `seq $start -1 0` > do > offset=`expr $i \* $iosize` > $XFS_IO_PROG -F -f -c "mmap -w $offset $iosize" -c "mwrite $offset > $iosize" $testfile > [ $? -ne 0 ] && exit > done > > wait > > echo "Silence is golden." > > # success, all done > status=0 > exit _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs