On 9/6/12 3:49 AM, Eryu Guan wrote: > On Thu, Sep 6, 2012 at 6:20 AM, Eric Sandeen <sandeen@xxxxxxxxxx> wrote: >> extN can report f_blocks in statfs in 2 different ways, based >> on whether or not metadata overhead is counted. This has broken >> in the past, so here's a test for it. >> >> It looks at dumpe2fs output to get total blocks and free blocks >> right after mkfs. The difference should be, by definition, the >> exact amount of metadata overhead. >> >> It then compares this to what's reported via stat -f for f_blocks. >> For "minix" df, it should be exactly equal to the total blocks, >> and for "bsd" df, it should be total blocks less overhead. >> >> It tests that the latter is accurate to within a 1% tolerance. >> >> Today the journal doesn't count as overhead in the statfs call; >> this should be fixed kernelside but for many filesystems it'll be >> within the threshold anyway. >> >> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> >> --- >> >> diff --git a/285 b/285 >> new file mode 100755 >> index 0000000..cda8531 >> --- /dev/null >> +++ b/285 >> @@ -0,0 +1,97 @@ >> +#! /bin/bash >> +# FS QA Test No. 286 > > The Test No. should be 285 here? Oh, yes. I figure I'll have to renumber before commit anyway ;) >> +# >> +# Test overhead & df output for extN filesystems >> +# >> +#----------------------------------------------------------------------- >> +# Copyright (c) 2012 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=sandeen@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 15 >> + >> +_cleanup() >> +{ >> + cd / >> + rm -f $tmp.* >> +} >> + >> +# get standard environment, filters and checks >> +. ./common.rc >> +. ./common.filter >> + >> +# real QA test starts here >> + >> +# Modify as appropriate. >> +_supported_fs ext2 ext3 ext4 >> +_supported_os Linux >> +_require_scratch >> + >> +rm -f $seq.full >> + >> +_scratch_mkfs >> $seq.full 2>&1 >> + >> +TOTAL_BLOCKS=`dumpe2fs -h $SCRATCH_DEV 2>/dev/null \ >> + | awk '/Block count:/{print $3}'` >> + >> +FREE_BLOCKS=`dumpe2fs -h $SCRATCH_DEV 2>/dev/null \ >> + | awk '/Free blocks:/{print $3}'` > > I guess TOTAL_BLOCKS and FREE_BLOCKS will be wrong when testing ext4 > on RHEL5 which has a separate dumpe4fs for ext4. dumpe2fs would fail, yes ... I don't know if we really want to special case rhel5's weirdness in xfstests or not ... -Eric > Thanks, > Eryu Guan >> + >> +# nb: kernels today don't count journal blocks as overhead, but should. >> +# For most fileystems this will still be within tolerance. >> +OVERHEAD=$(($TOTAL_BLOCKS-$FREE_BLOCKS)) >> + >> +# bsddf|minixdf >> +# Set the behaviour for the statfs system call. The minixdf >> +# behaviour is to return in the f_blocks field the total number of >> +# blocks of the filesystem, while the bsddf behaviour (which is >> +# the default) is to subtract the overhead blocks used by the ext2 >> +# filesystem and not available for file storage. >> + >> +# stat -f output looks like; we get f_blocks from that, which >> +# varies depending on the df mount options used below: >> + >> +# Filesystem 4K-blocks Used Available Use% Mounted on >> +# /dev/sda8 2405312 2208933 196379 92% / >> + >> +_scratch_mount "-o minixdf" >> +MINIX_F_BLOCKS=`stat -f $SCRATCH_MNT | awk '/^Blocks/{print $3}'` >> +umount $SCRATCH_MNT >> + >> +_scratch_mount "-o bsddf" >> +BSD_F_BLOCKS=`stat -f $SCRATCH_MNT | awk '/^Blocks/{print $3}'` >> +umount $SCRATCH_MNT >> + >> +echo "Overhead is $OVERHEAD out of $TOTAL_BLOCKS" >> $seq.full >> +echo "BSD blocks $BSD_F_BLOCKS" >> $seq.full >> +echo "MINIX blocks $MINIX_F_BLOCKS" >> $seq.full >> + >> +# minix should be exactly equal (hence 0) >> +_within_tolerance "minix f_blocks" $MINIX_F_BLOCKS $TOTAL_BLOCKS 0 -v >> +# bsd should be within ... we'll say 1% >> +_within_tolerance "bsd f_blocks" $BSD_F_BLOCKS $(($TOTAL_BLOCKS-$OVERHEAD)) 1% -v >> + >> +# success, all done >> +status=0 >> +exit >> diff --git a/285.out b/285.out >> new file mode 100644 >> index 0000000..2075e21 >> --- /dev/null >> +++ b/285.out >> @@ -0,0 +1,3 @@ >> +QA output created by 285 >> +minix f_blocks is in range >> +bsd f_blocks is in range >> diff --git a/group b/group >> index 104ed35..0b33178 100644 >> --- a/group >> +++ b/group >> @@ -403,3 +403,4 @@ deprecated >> 282 dump ioctl auto quick >> 283 dump ioctl auto quick >> 284 auto >> +285 auto >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html