From: Eryu Guan <guaneryu@gmail.com>
To: Liu Bo <bo.liu@linux.alibaba.com>
Cc: fstests@vger.kernel.org, linux-ext4@vger.kernel.org
Subject: Re: [PATCH] Fstest: ext4: regression test for a ENOSPC warning
Date: Sat, 3 Nov 2018 17:42:01 +0800 [thread overview]
Message-ID: <20181103094201.GA12788@desktop> (raw)
In-Reply-To: <1541125165-122108-1-git-send-email-bo.liu@linux.alibaba.com>
On Fri, Nov 02, 2018 at 10:19:25AM +0800, Liu Bo wrote:
> This adds a regression test for a ENOSPC warning which can be triggered if
> '-odioread_nolock,nodelalloc' and quota are used.
>
> The bug was fixed by patch
> "Ext4: fix ENOSPC when both quota and dioread_nolock are enabled".
>
> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
> ---
> tests/ext4/034 | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/ext4/034.out | 17 +++++++++++++
> tests/ext4/group | 1 +
> 3 files changed, 93 insertions(+)
> create mode 100755 tests/ext4/034
> create mode 100644 tests/ext4/034.out
>
> diff --git a/tests/ext4/034 b/tests/ext4/034
> new file mode 100755
> index 00000000..2449c3b7
> --- /dev/null
> +++ b/tests/ext4/034
> @@ -0,0 +1,75 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2018 Liu Bo, Alibaba. All Rights Reserved.
> +#
> +# FS QA Test 034
> +#
> +# Regression test for a ENOSPC warning when both quota and
> +# "-o dioread_nolock,nodelalloc" is used.
> +#
> +# The bug was fixed by commit
> +# "Ext4: fix ENOSPC when both quota and dioread_nolock are enabled"
> +#
> +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
> +. ./common/quota
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +
> +# Modify as appropriate.
> +_supported_fs generic
_supported_fs ext4
> +_supported_os Linux
> +_require_scratch
> +_require_quota
> +_require_nobody
> +
> +echo "Format and mount"
> +_scratch_mkfs "-O quota" > $seqres.full 2>&1
This needs a require rule to check quota feature support status, i.e.
_require_scratch_ext4_feature "quota"
> +_scratch_mount "-o dioread_nolock,nodelalloc" > $seqres.full 2>&1
> +quotaon $SCRATCH_MNT 2>/dev/null
And given that "quota" feature is enabled, quota is turned on
automatically on mount, seems there's no need to do quotaon.
> +
> +echo "Create the original file"
> +touch $SCRATCH_MNT/foobar >> $seqres.full
> +chown nobody $SCRATCH_MNT/foobar >> $seqres.full
> +
> +quotaon $SCRATCH_MNT 2>/dev/null
Duplicated quotaon?
> +echo "Set hard quota"
> +setquota -u nobody 0 10M 0 0 $SCRATCH_MNT
> +_report_quota_blocks $SCRATCH_MNT
Looks like this is not needed either, if it's only for debug purpose
just dump the output to $seqres.full
> +
> +echo "Create 2 level extent tree (btree) for foobar with a unwritten extent"
> +$XFS_IO_PROG -f -c "pwrite 0 4k" -c "falloc 4k 4k" -c "pwrite 8k 4k" -c "pwrite 20k 4k" -c "pwrite 28k 4k" -c "pwrite 36k 4k" -c "fsync" $SCRATCH_MNT/foobar >> $seqres.full
Too long line, wrap it :)
> +
> +xfs_io -c "fiemap -v" $SCRATCH_MNT/foobar >> $seqres.full
$XFS_IO_PROG
> +
> +echo "Convert unwritten extent to written and collapse extent tree to inode"
> +$XFS_IO_PROG -c "pwrite 4k 4k" $SCRATCH_MNT/foobar >> $seqres.full
> +
> +echo "Create a new file and do fsync to force a jbd2 commit"
> +$XFS_IO_PROG -f -c "pwrite 0 4k" -c "fsync" $SCRATCH_MNT/dummy >> $seqres.full
> +
> +echo "sync $SCRATCH_MNT to writeback"
> +$XFS_IO_PROG -c "syncfs" $SCRATCH_MNT >> $seqres.full
syncfs needs
_require_xfs_io_command "syncfs"
Perhaps _scratch_unmount or just sync to trigger the writeback?
Thanks,
Eryu
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/ext4/034.out b/tests/ext4/034.out
> new file mode 100644
> index 00000000..dd0c8a7c
> --- /dev/null
> +++ b/tests/ext4/034.out
> @@ -0,0 +1,17 @@
> +QA output created by 034
> +Format and mount
> +Create the original file
> +Set hard quota
> +root 20 0 0
> +nobody 0 0 10240
> +User soft hard grace
> +Block time: 7days; Inode
> +Block File limits
> +----------------------------------------------------------------------
> +*** for user quotas
> +
> +
> +Create 2 level extent tree (btree) for foobar with a unwritten extent
> +Convert unwritten extent to written and collapse extent tree to inode
> +Create a new file and do fsync to force a jbd2 commit
> +sync /mnt/scratch to writeback
> diff --git a/tests/ext4/group b/tests/ext4/group
> index b850f568..eb744a12 100644
> --- a/tests/ext4/group
> +++ b/tests/ext4/group
> @@ -36,6 +36,7 @@
> 031 auto quick dax
> 032 auto quick ioctl resize
> 033 auto ioctl resize
> +034 auto quick quota
> 271 auto rw quick
> 301 aio auto ioctl rw stress defrag
> 302 aio auto ioctl rw stress defrag
> --
> 2.14.2
>
next prev parent reply other threads:[~2018-11-03 18:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-02 2:19 [PATCH] Fstest: ext4: regression test for a ENOSPC warning Liu Bo
2018-11-02 2:19 ` Liu Bo
2018-11-03 9:42 ` Eryu Guan [this message]
2018-11-07 2:56 ` Liu Bo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181103094201.GA12788@desktop \
--to=guaneryu@gmail.com \
--cc=bo.liu@linux.alibaba.com \
--cc=fstests@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.