On Mon, Jun 13, 2016 at 9:06 AM, Lu Fengqi <lufq.fnst@xxxxxxxxxxxxxx> wrote: > At 06/13/2016 03:29 PM, Lu Fengqi wrote: >> >> At 06/13/2016 11:04 AM, Eryu Guan wrote: >>> >>> On Mon, Jun 13, 2016 at 10:10:50AM +0800, Lu Fengqi wrote: >>>> >>>> Test if qgroup can handle extent de-reference during reallocation. >>>> "extent de-reference" means that reducing an extent's reference count >>>> or freeing an extent. >>>> Although current qgroup can handle it, we still need to prevent any >>>> regression which may break current qgroup. >>>> >>>> Signed-off-by: Lu Fengqi <lufq.fnst@xxxxxxxxxxxxxx> >>>> --- >>>> common/rc | 4 +-- >>>> tests/btrfs/028 | 98 >>>> +++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>> tests/btrfs/028.out | 2 ++ >>>> tests/btrfs/group | 1 + >>>> 4 files changed, 103 insertions(+), 2 deletions(-) >>>> create mode 100755 tests/btrfs/028 >>>> create mode 100644 tests/btrfs/028.out >>>> >>>> diff --git a/common/rc b/common/rc >>>> index 51092a0..650d198 100644 >>>> --- a/common/rc >>>> +++ b/common/rc >>>> @@ -3284,9 +3284,9 @@ _btrfs_get_profile_configs() >>>> # stress btrfs by running balance operation in a loop >>>> _btrfs_stress_balance() >>>> { >>>> - local btrfs_mnt=$1 >>>> + local options=$@ >>>> while true; do >>>> - $BTRFS_UTIL_PROG balance start $btrfs_mnt >>>> + $BTRFS_UTIL_PROG balance start $options >>>> done >>>> } >>>> >>>> diff --git a/tests/btrfs/028 b/tests/btrfs/028 >>>> new file mode 100755 >>>> index 0000000..8cea49a >>>> --- /dev/null >>>> +++ b/tests/btrfs/028 >>>> @@ -0,0 +1,98 @@ >>>> +#! /bin/bash >>>> +# FS QA Test 028 >>>> +# >>>> +# Test if qgroup can handle extent de-reference during reallocation. >>>> +# "extent de-reference" means that reducing an extent's reference count >>>> +# or freeing an extent. >>>> +# Although current qgroup can handle it, we still need to prevent any >>>> +# regression which may break current qgroup. >>>> +# >>>> >>>> +#----------------------------------------------------------------------- >>>> >>>> +# Copyright (c) 2016 Fujitsu. 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 >>>> + >>>> +# remove previous $seqres.full before test >>>> +rm -f $seqres.full >>>> + >>>> +# real QA test starts here >>>> +_supported_fs btrfs >>>> +_supported_os Linux >>>> +_require_scratch >>>> + >>>> +_scratch_mkfs >>>> +_scratch_mount >>>> + >>>> +_run_btrfs_util_prog quota enable $SCRATCH_MNT >>>> +_run_btrfs_util_prog quota rescan -w $SCRATCH_MNT >>>> + >>>> +# Increase the probability of generating de-refer extent, and decrease >>>> +# other. >>>> +args=`_scale_fsstress_args -z \ >>>> + -f write=10 -f unlink=10 \ >>>> + -f creat=10 -f fsync=10 \ >>>> + -f fsync=10 -n 100000 -p 2 \ >>>> + -d $SCRATCH_MNT/stress_dir` >>>> +echo "Run fsstress $args" >>$seqres.full >>>> +$FSSTRESS_PROG $args >/dev/null 2>&1 & >>>> +fsstress_pid=$! >>>> + >>>> +echo "Start balance" >>$seqres.full >>>> +_btrfs_stress_balance -d $SCRATCH_MNT >/dev/null 2>&1 & >>>> +balance_pid=$! >>>> + >>>> +# 30s is enough to trigger bug >>>> +sleep $((30*$TIME_FACTOR)) >>>> +kill $fsstress_pid $balance_pid >>>> +wait >>>> + >>>> +# kill _btrfs_stress_balance can't end balance, so call btrfs >>>> balance cancel >>>> +# to cancel running or paused balance. >>>> +$BTRFS_UTIL_PROG balance cancel $SCRATCH_MNT &> /dev/null >>>> + >>>> +_run_btrfs_util_prog filesystem sync $SCRATCH_MNT >>>> + >>>> +_scratch_unmount >>>> + >>>> +# generate a qgroup report and look for inconsistent groups >>>> +$BTRFS_UTIL_PROG check --qgroup-report $SCRATCH_DEV 2>&1 | \ >>>> + grep -q -E "Counts for qgroup.*are different" >>>> +if [ $? -ne 0 ]; then >>>> + echo "Silence is golden" >>>> + # success, all done >>>> + status=0 >>>> +fi >>> >>> >>> I'm testing with 4.7-rc1 kernel and btrfs-progs v4.4, this test fails, >>> which means btrfs check finds inconsistent groups. But according to your >>> commit log, current kernel should pass the test. So is the failure >>> expected? >>> >>> Also, just grep for different qgroup counts and print the message out if >>> grep finds the message, so it breaks golden image on error and we know >>> something really goes wrong. Right now test fails just because of >>> missing "Silence is golden", which is unclear why it fails: >>> >>> @@ -1,2 +1 @@ >>> QA output created by 028 >>> -Silence is golden >>> >>> Do the following instead: >>> >>> $BTRFS_UTIL_PROG check ... | grep -E "..." >>> echo "Silence is golden" >>> status=0 >>> exit >>> >>> And we see this on failure: >>> >>> @@ -1,2 +1,3 @@ >>> QA output created by 028 >>> +Counts for qgroup id: 5 are different >>> Silence is golden >>> >>> Thanks, >>> Eryu >>> >>>> + >>>> +exit >>>> diff --git a/tests/btrfs/028.out b/tests/btrfs/028.out >>>> new file mode 100644 >>>> index 0000000..2615f73 >>>> --- /dev/null >>>> +++ b/tests/btrfs/028.out >>>> @@ -0,0 +1,2 @@ >>>> +QA output created by 028 >>>> +Silence is golden >>>> diff --git a/tests/btrfs/group b/tests/btrfs/group >>>> index da0e27f..35ecf59 100644 >>>> --- a/tests/btrfs/group >>>> +++ b/tests/btrfs/group >>>> @@ -30,6 +30,7 @@ >>>> 025 auto quick send clone >>>> 026 auto quick compress prealloc >>>> 027 auto replace >>>> +028 auto qgroup balance >>>> 029 auto quick clone >>>> 030 auto quick send >>>> 031 auto quick subvol clone >>>> -- >>>> 2.5.5 >>>> >>>> >>>> >>>> -- >>>> To unsubscribe from this list: send the line "unsubscribe fstests" in >>>> the body of a message to majordomo@xxxxxxxxxxxxxxx >>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> >>> >>> >> >> Excuse me, I tried several versions of the kernel (4.6-rc7+ / 4.7-rc1 / >> 4.7-rc3), the test didn't fail. Can you provide me with more information >> about your test environment? >> >> > Sorry, this test fails after I perform it more times. It seems to be a bug > of btrfs qgroup. We will continue to track this bug. Which is already known and reported some time ago: http://thread.gmane.org/gmane.comp.file-systems.btrfs/56687/focus=56824 It's another regression introduced in kernel 4.2 with the large qgroups rewrite (data extents are not accounted anymore after balance). It's trivial to reproduce with: #!/bin/bash -x MNT="/mnt/sdi" DEV="/dev/sdi" mkfs.btrfs --nodesize=4096 -f $DEV mount -t btrfs $DEV $MNT # fill metadata space, create a tree with 1 node and 2 leaves for ((i = 1; i <= 10; i++)); do mkdir $MNT/d$i done for ((i = 1; i <= 1; i++)); do xfs_io -f -c "pwrite -S 0xaa 0 8K" $MNT/f$i done btrfs fi sync $MNT btrfs quota enable $MNT btrfs quota rescan -w $MNT btrfs qg show $MNT umount $MNT btrfsck $DEV mount -t btrfs $DEV $MNT time btrfs balance start -d $MNT umount $MNT btrfsck $DEV Also, please, when you send a new version of a patch, add a changelog describing what changed between versions. See [1] for an example. I noticed you do this for all patches you send. [1] https://btrfs.wiki.kernel.org/index.php/Developer%27s_FAQ#Repeated_submissions > > > -- > Thanks, > Lu > > > -- > To unsubscribe from this list: send the line "unsubscribe fstests" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Filipe David Manana, "Reasonable men adapt themselves to the world. Unreasonable men adapt the world to themselves. That's why all progress depends on unreasonable men." -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html