xfs: test inode allocations in post-growfs disk space

Make sure inodes can be allocated in new space added by xfs_growfs.

Regression test for
xfs: allow inode allocations in post-growfs disk space

Signed-off-by: Eryu Guan <eguan@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Eryu Guan
2014-08-13 11:15:23 +10:00
committed by Dave Chinner
parent 313db9fe06
commit 36e1af6a8f
4 changed files with 141 additions and 0 deletions
+33
View File
@@ -2312,6 +2312,39 @@ _require_btrfs_fs_feature()
_notrun "Feature $feat not supported by the available btrfs version" _notrun "Feature $feat not supported by the available btrfs version"
} }
_get_total_inode()
{
if [ -z "$1" ]; then
echo "Usage: _get_total_inode <mnt>"
exit 1
fi
local nr_inode;
nr_inode=`$DF_PROG -i $1 | tail -1 | awk '{print $3}'`
echo $nr_inode
}
_get_used_inode()
{
if [ -z "$1" ]; then
echo "Usage: _get_used_inode <mnt>"
exit 1
fi
local nr_inode;
nr_inode=`$DF_PROG -i $1 | tail -1 | awk '{print $4}'`
echo $nr_inode
}
_get_free_inode()
{
if [ -z "$1" ]; then
echo "Usage: _get_free_inode <mnt>"
exit 1
fi
local nr_inode;
nr_inode=`$DF_PROG -i $1 | tail -1 | awk '{print $5}'`
echo $nr_inode
}
init_rc() init_rc()
{ {
if [ "$iam" == new ] if [ "$iam" == new ]
Executable
+105
View File
@@ -0,0 +1,105 @@
#! /bin/bash
# FS QA Test No. xfs/015
#
# Make sure inodes can be allocated in new space added by xfs_growfs
#
# Regression test for
# xfs: allow inode allocations in post-growfs disk space
#
#-----------------------------------------------------------------------
# Copyright (c) 2014 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
#-----------------------------------------------------------------------
#
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.*
}
create_file()
{
local dir=$1
local i=0
while echo -n >$dir/testfile_$i; do
let i=$i+1
done
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# real QA test starts here
_supported_fs xfs
_supported_os Linux
_require_scratch
# need 64M space, don't make any assumption
_scratch_mkfs >/dev/null 2>&1
_scratch_mount
_require_fs_space $SCRATCH_MNT 65536
_scratch_unmount
rm -f $seqres.full
_scratch_mkfs_sized $((16 * 1024 * 1024)) | _filter_mkfs >$seqres.full 2>$tmp.mkfs
# get original data blocks number and agcount
. $tmp.mkfs
_scratch_mount
nr_worker=$((agcount * 2))
echo "Fork $nr_worker workers to consume free inodes in background" >>$seqres.full
(
i=0
while [ $i -lt $nr_worker ]; do
mkdir $SCRATCH_MNT/testdir_$i
create_file $SCRATCH_MNT/testdir_$i &
let i=$i+1
done
wait
) >/dev/null 2>&1 &
# Grow fs at the same time, at least x4
# doubling or tripling the size couldn't reproduce
echo "Grow fs to $((dblocks * 4)) blocks" >>$seqres.full
$XFS_GROWFS_PROG -D $((dblocks * 4)) $SCRATCH_MNT >>$seqres.full
# Wait for background create_file to hit ENOSPC
wait
# log inode status in $seqres.full for debug purpose
echo "Inode status after growing fs" >>$seqres.full
$DF_PROG -i $SCRATCH_MNT >>$seqres.full
# inode should be at least 99% used
total_inode=`_get_total_inode $SCRATCH_MNT`
used_inode=`_get_used_inode $SCRATCH_MNT`
_within_tolerance "used inodes" $used_inode $total_inode %1 -v
status=$?
exit
+2
View File
@@ -0,0 +1,2 @@
QA output created by 015
used inodes is in range
+1
View File
@@ -12,6 +12,7 @@
012 rw auto quick 012 rw auto quick
013 auto metadata stress 013 auto metadata stress
014 auto enospc quick quota 014 auto enospc quick quota
015 auto enospc growfs
016 rw auto quick 016 rw auto quick
017 mount auto quick stress 017 mount auto quick stress
018 deprecated # log logprint v2log 018 deprecated # log logprint v2log