| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2012 Red Hat, Inc. All Rights Reserved. |
| # |
| # FS QA Test No. ext4/042 (was shared/289) |
| # |
| # Test overhead & df output for extN filesystems |
| # |
| seq=`basename $0` |
| seqres=$RESULT_DIR/$seq |
| 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 |
| _require_scratch |
| |
| rm -f $seqres.full |
| |
| _scratch_mkfs >> $seqres.full 2>&1 |
| |
| # Get the honest truth about block counts straight from metadata on disk |
| 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}'` |
| |
| 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 this; we get f_blocks from that, which |
| # varies depending on the df mount options used below: |
| |
| # File: "/mnt/test" |
| # ID: affc5f2b2f57652 Namelen: 255 Type: ext2/ext3 |
| # Block size: 4096 Fundamental block size: 4096 |
| # Blocks: Total: 5162741 Free: 5118725 Available: 4856465 |
| # Inodes: Total: 1313760 Free: 1313749 |
| |
| _scratch_mount "-o minixdf" |
| MINIX_F_BLOCKS=`stat -f $SCRATCH_MNT | awk '/^Blocks/{print $3}'` |
| _scratch_unmount |
| |
| _scratch_mount "-o bsddf" |
| BSD_F_BLOCKS=`stat -f $SCRATCH_MNT | awk '/^Blocks/{print $3}'` |
| _scratch_unmount |
| |
| # Echo data to $seqres.full for analysis |
| echo "Overhead is $OVERHEAD blocks out of $TOTAL_BLOCKS ($FREE_BLOCKS free)" >> $seqres.full |
| echo "MINIX free blocks $MINIX_F_BLOCKS" >> $seqres.full |
| echo "BSD free blocks $BSD_F_BLOCKS" >> $seqres.full |
| |
| # minix should be exactly equal (hence tolerance of 0) |
| _within_tolerance "minix f_blocks" $MINIX_F_BLOCKS $TOTAL_BLOCKS 0 -v |
| # bsd should be within ... we'll say 1% for some slop |
| _within_tolerance "bsd f_blocks" $BSD_F_BLOCKS $(($TOTAL_BLOCKS-$OVERHEAD)) 1% -v |
| |
| # success, all done |
| status=0 |
| exit |