xfs
[Top] [All Lists]

Re: [PATCH V2] xfstests: Test xfs_fsr / swapext management of di_forkoff

To: Eric Sandeen <sandeen@xxxxxxxxxxx>
Subject: Re: [PATCH V2] xfstests: Test xfs_fsr / swapext management of di_forkoff w/ selinux
From: Eryu Guan <guaneryu@xxxxxxxxx>
Date: Sat, 19 Oct 2013 01:26:35 +0800
Cc: Eric Sandeen <sandeen@xxxxxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=m9BI3WazP47LMUsgWmCoWiGUtqM7FYJlpqY5mSqQSZU=; b=tPce1P2p6O+CYmHyunzVoQYysv8UWsqDK3c32eTVPPg+31UNA1tgtm7FJA5DsXwhyb l5P1+b0BCWRTd7dS2tv2ljoV32jg4rbgLwBnEuhKm/gpFviwWeUiz06u8ZieaTpnJj0d JMeKwUPKPOPD7StHeoAOKlKSCgdMwTRrApjwNtKnpGFBBD9s0+sf4wjA0kHDa9AX8MSi BDn/Frw2qPKUPS7ykirvfd259w3NZaoM1BudkPxGWP50cSv559PoqPVML04nW/okrzan TwirNzkPKmkSTLrWaW0H1fcsB+5yeSeoCzgmEyEu99b7EEp7YCoPixzUel5Rc85O0Q1R 8xpw==
In-reply-to: <52616072.6040808@xxxxxxxxxxx>
References: <5260B62D.2010507@xxxxxxxxxx> <52616072.6040808@xxxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
On Fri, Oct 18, 2013 at 11:23:14AM -0500, Eric Sandeen wrote:
> In some cases selinux's creation of an xattr on the temporary
> fd creates a local xattr, but the file we are trying to 
> defragment has attrs in extent format, and the forkoff mismatch
> will cause xfs_fsr to fail.  This test demonstrates it;  I
> have old patches sent to the list long ago that should fix
> it.  I'll resend them soon.
> 
> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
> ---
> 
> V2: Address Eryu's review
> 
> diff --git a/tests/xfs/351 b/tests/xfs/351
> new file mode 100755
> index 0000000..13c7629
> --- /dev/null
> +++ b/tests/xfs/351
> @@ -0,0 +1,88 @@
> +#! /bin/bash
> +# FS QA Test No. 351
> +#
> +# Test xfs_fsr / swapext management of di_forkoff w/ selinux
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2013 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.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +_require_scratch
> +
> +# real QA test starts here
> +
> +_supported_fs xfs
> +_supported_os Linux
> +
> +getenforce | grep -q "Enforcing\|Permissive" || _notrun "SELinux not enabled"
> +[ "$XFS_FSR_PROG" = "" ] && _notrun "xfs_fsr not found"
> +
> +rm -f $seqres.full
> +
> +_scratch_mkfs_xfs -i size=256 >> $seq.full 2>&1 || _fail "mkfs failed"
> +
> +# Manually mount to avoid fs-wide context set by default in xfstests
> +mount $SCRATCH_DEV $SCRATCH_MNT
> +
> +touch $SCRATCH_MNT/$seq.test
> +
> +# Create an extents-format attribute on a file
> +$XFS_IO_PROG -f -c "pwrite -S 0x63 0 4096" $SCRATCH_MNT/attrvals >> 
> $seqres.full 2>&1
> +cat $SCRATCH_MNT/attrvals | attr -s name $SCRATCH_MNT/$seq.test >> 
> $seqres.full 2>&1
> +
> +# Fragment the file by writing backwards
> +for I in `seq 6 -1 0`; do
> +     dd if=/dev/zero of=$SCRATCH_MNT/$seq.test seek=$I bs=4k \
> +        oflag=direct count=1 conv=notrunc >> $seqres.full 2>&1
> +done
> +
> +# See if xfs_fsr works.
> +
> +# The target file now has a non-local attribute, but the
> +# fsr temp file gets assigned a local attribute on creation,
> +# due to selinux.
> +    

There's trailing whitespaces issue here, otherwise looks good to me.

I suppose the seq number can be fixed at commit time, as well as the
trailing whitespaces.

Reviewed-by: Eryu Guan <eguan@xxxxxxxxxx>

Thanks!
Eryu

BTW, test fails on 3.12-rc5 kernel

--- tests/xfs/351.out   2013-10-18 13:23:10.219847555 -0400
+++ /root/xfstests/results//xfs/351.out.bad     2013-10-18 13:24:38.014147342 
-0400
@@ -1,3 +1,3 @@
 QA output created by 351
 SCRATCH_MNT/351.test
-extents before:6 after:1 DONE SCRATCH_MNT/351.test
+XFS_IOC_SWAPEXT failed: SCRATCH_MNT/351.test: Invalid argument

> +# In this case, the large-ish selinux attr will create a forkoff
> +# in the temp file smaller than the forkoff in the target file,
> +# because the FMT_EXTENTS attr takes up less space.  If there is
> +# no mechanism to grow the temp forkoff to match, we can end up
> +# failing to swap these 2 inodes if the result is not enough
> +# data space in the temp inode as a result.
> +
> +$XFS_FSR_PROG -v $SCRATCH_MNT/$seq.test | _filter_scratch
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/351.out b/tests/xfs/351.out
> new file mode 100644
> index 0000000..86cbe5d
> --- /dev/null
> +++ b/tests/xfs/351.out
> @@ -0,0 +1,3 @@
> +QA output created by 351
> +SCRATCH_MNT/351.test
> +extents before:6 after:1 DONE SCRATCH_MNT/351.test
> diff --git a/tests/xfs/group b/tests/xfs/group
> index acb92ac..da76770 100644
> --- a/tests/xfs/group
> +++ b/tests/xfs/group
> @@ -180,4 +180,4 @@
>  298 auto attr symlink quick
>  299 auto quota
>  350 auto dump quota
> -
> +351 auto fsr
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

<Prev in Thread] Current Thread [Next in Thread>