From: Eric Sandeen Date: Fri, 29 May 2009 17:48:23 +0000 (-0500) Subject: Test trim of last small AG for large filesystem resizes X-Git-Tag: v1.1.0~288 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a6c2e775eef5c67fcab3cbaac25c8bd4e073a254;p=xfstests-dev.git Test trim of last small AG for large filesystem resizes As reported at http://article.gmane.org/gmane.comp.file-systems.xfs.general/29187 this trimming may cause an overflow in the new size calculation. Patch to fix it, and testcase at http://article.gmane.org/gmane.comp.file-systems.xfs.general/29193 Signed-off-by: Eric Sandeen Reviewed-by: Christoph Hellwig --- diff --git a/206 b/206 new file mode 100755 index 00000000..b1b2286e --- /dev/null +++ b/206 @@ -0,0 +1,97 @@ +#! /bin/sh +# FS QA Test No. 206 +# +# Test trim of last small AG for large filesystem resizes +# +# As reported at +# http://article.gmane.org/gmane.comp.file-systems.xfs.general/29187 +# this trimming may cause an overflow in the new size calculation. +# Patch and testcase at +# http://article.gmane.org/gmane.comp.file-systems.xfs.general/29193 +# +#----------------------------------------------------------------------- +# Copyright (c) 2009 Eric Sandeen. +# +# 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@sandeen.net + +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() +{ + umount $tmpdir + rmdir $tmpdir + rm -f $tmp + rm -f $tmpfile +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here + +# Modify as appropriate. +_supported_fs xfs +_supported_os IRIX Linux + +bitsperlong=`src/feature -w` +if [ "$bitsperlong" -ne 64 ]; then + _notrun "This test is only valid on 64 bit machines" +fi + +rm -f $seq.full + +tmpfile=$TEST_DIR/fsfile.$$ +tmpdir=$TEST_DIR/tmpdir.$$ + +mkdir -p $tmpdir || _fail "!!! failed to create temp mount dir" + +# Create a file w/ the offset we wish to resize to +echo "=== truncate file ===" +dd if=/dev/zero of=$tmpfile bs=1 seek=19998630180864 count=1 >/dev/null 2>&1 \ + || _fail "!!! failed to truncate loopback file to correct size" + +# mkfs slightly smaller than that +echo "=== mkfs.xfs ===" +mkfs.xfs -f -bsize=4096 -dagsize=76288719b,size=3905982455b -llazy-count=0 $tmpfile \ + | sed -e "s,^meta-data=.*isize,meta-data=FILE isize,g" + +mount -o loop $tmpfile $tmpdir || _fail "!!! failed to loopback mount" + +# see what happens when we growfs it +echo "=== xfs_growfs ===" +xfs_growfs $tmpdir \ + | sed -e "s,^meta-data=.*isize,meta-data=FILE isize,g" + +# and double-check the new geometry +echo "=== xfs_info ===" +xfs_info $tmpdir \ + | sed -e "s,^meta-data=.*isize,meta-data=FILE isize,g" + +# _cleanup cleans up for us + +# success, all done +status=0 +exit + diff --git a/206.out b/206.out new file mode 100644 index 00000000..75a2e890 --- /dev/null +++ b/206.out @@ -0,0 +1,20 @@ +QA output created by 206 +=== truncate file === +=== mkfs.xfs === +meta-data=FILE isize=256 agcount=52, agsize=76288719 blks + = sectsz=512 attr=2 +data = bsize=4096 blocks=3905982455, imaxpct=5 + = sunit=0 swidth=0 blks +naming =version 2 bsize=4096 ascii-ci=0 +log =internal log bsize=4096 blocks=32768, version=2 + = sectsz=512 sunit=0 blks, lazy-count=0 +realtime =none extsz=4096 blocks=0, rtextents=0 +=== xfs_growfs === +meta-data=FILE isize=256 agcount=52, agsize=76288719 blks + = sectsz=512 attr=2 +data = bsize=4096 blocks=3905982455, imaxpct=5 + = sunit=0 swidth=0 blks +naming =version 2 bsize=4096 ascii-ci=0 +log =internal bsize=4096 blocks=32768, version=2 + = sectsz=512 sunit=0 blks, lazy-count=0 +realtime =none extsz=4096 blocks=0, rtextents=0 diff --git a/group b/group index 0ac33c2b..0551d06a 100644 --- a/group +++ b/group @@ -310,3 +310,4 @@ atime 203 ioctl auto 204 metadata rw auto 205 metadata rw auto +206 growfs auto quick