From: "Darrick J. Wong" <djwong@kernel.org>
To: fstests@vger.kernel.org, riteshh@linux.ibm.com
Subject: Re: [PATCH v2] generic: test small swapfile without page-aligned contiguous blocks
Date: Wed, 16 Jun 2021 20:06:02 -0700 [thread overview]
Message-ID: <20210617030602.GC158232@locust> (raw)
In-Reply-To: <20210617022732.GK2978781@localhost.localdomain>
On Thu, Jun 17, 2021 at 10:27:32AM +0800, Zorro Lang wrote:
> On Wed, Jun 16, 2021 at 05:17:48PM -0700, Darrick J. Wong wrote:
> > On Wed, Jun 16, 2021 at 12:11:28AM +0800, Zorro Lang wrote:
> > > If a swapfile doesn't contain even a single page-aligned contiguous
> > > range of blocks, it's an invalid swapfile, and might cause kernel
> > > issue. This case covered commit 5808fecc5723 ("iomap: Fix negative
> > > assignment to unsigned sis->pages in iomap_swapfile_activate").
> > >
> > > Signed-off-by: Zorro Lang <zlang@redhat.com>
> > > ---
> > >
> > > Hi,
> > >
> > > Sorry for the late V2, I just back from a longtime sick leave. V2 accord
> >
> > :( I hope you're doing better!
>
> Thanks, feel better now, trying to catch what I missed :)
>
> >
> > > to the review points from djwong:
> > > https://lore.kernel.org/fstests/20210525160907.GB202095@locust/
> > > But I didn't change the _scratch_mkfs_blocksized() helper in this patch.
> > >
> > > CC Ritesh Harjani who's the original author of commit 5808fecc5723, and
> > > looks like he sent another test case.
> > >
> > > Thanks,
> > > Zorro
> > >
> > > tests/generic/639 | 82 +++++++++++++++++++++++++++++++++++++++++++
> > > tests/generic/639.out | 2 ++
> > > tests/generic/group | 1 +
> > > 3 files changed, 85 insertions(+)
> > > create mode 100755 tests/generic/639
> > > create mode 100644 tests/generic/639.out
> > >
> > > diff --git a/tests/generic/639 b/tests/generic/639
> > > new file mode 100755
> > > index 00000000..b371a6e9
> > > --- /dev/null
> > > +++ b/tests/generic/639
> > > @@ -0,0 +1,82 @@
> > > +#! /bin/bash
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +# Copyright (c) 2021 Red Hat Inc. All Rights Reserved.
> > > +#
> > > +# FS QA Test No. 639
> > > +#
> > > +# Test small swapfile which doesn't contain even a single page-aligned contiguous
> > > +# range of blocks. This case covered commit 5808fecc5723 ("iomap: Fix negative
> > > +# assignment to unsigned sis->pages in iomap_swapfile_activate").
> > > +#
> > > +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 generic
> > > +_require_scratch
> > > +_require_scratch_swapfile
> > > +_require_test_program mkswap
> > > +_require_test_program swapon
> > > +
> > > +make_unaligned_swapfile()
> > > +{
> > > + local fname=$1
> > > + local n=$((psize / bsize - 1))
> > > +
> > > + # Make sure the swapfile doesn't contain even a single page-aligned
> > > + # contiguous range of blocks. This's necessary to cover the bug
> > > + $XFS_IO_PROG -f -t -c "pwrite 0 $(((psize + bsize) * n))" $fname >> $seqres.full 2>&1
> > > + for((i=1; i<=n; i++));do
> > > + $XFS_IO_PROG -c "fcollapse $(((psize - bsize) * i)) $bsize" $fname
> > > + done
> >
> > _require_xfs_io_command fcollapse
>
> Sure,
>
> >
> > is needed above.
> >
> > > + chmod 0600 $fname
> > > + $CHATTR_PROG +C $fname > /dev/null 2>&1
> > > + $here/src/mkswap $fname
> > > +}
> > > +
> > > +_scratch_mkfs >> $seqres.full 2>&1
> > > +_scratch_mount
> > > +psize=`get_page_size`
> > > +bsize=`_get_file_block_size $SCRATCH_MNT`
> > > +# Due to we need page-unaligned blocks, so blocksize < pagesize is necessary.
> > > +# If not, try to make a smaller enough block size
> > > +if [ $bsize -ge $psize ];then
> > > + _scratch_unmount
> > > + _scratch_mkfs_blocksized 1024 >> $seqres.full 2>&1
> > > + if [ $? -ne 0 ];then
> > > + _notrun "Can't make filesystem block size < page size"
> > > + fi
> > > + _scratch_mount
> > > + bsize=`_get_file_block_size $SCRATCH_MNT`
> > > + if [ $bsize -ne 1024 ];then
> > > + _notrun "1024 block size is necessary"
> >
> > This error message probably should have a little more context.
> >
> > _notrun "Could not force 1024-byte file block size."
>
> Sure. If I don't need to wait your patchset (about new grouplist), I'll change
> this case now.
Nah, that whole patchset is at least another week (and reposting) away.
--D
> Thanks,
> Zorro
>
> >
> > The logic in the test looks good to me now.
> >
> > --D
> >
> > > + fi
> > > +fi
> > > +swapfile=$SCRATCH_MNT/$seq.swapfile
> > > +make_unaligned_swapfile $swapfile
> > > +$here/src/swapon $swapfile
> > > +swapoff $swapfile
> > > +
> > > +echo "Silence is golden"
> > > +# success, all done
> > > +status=0
> > > +exit
> > > diff --git a/tests/generic/639.out b/tests/generic/639.out
> > > new file mode 100644
> > > index 00000000..62c66537
> > > --- /dev/null
> > > +++ b/tests/generic/639.out
> > > @@ -0,0 +1,2 @@
> > > +QA output created by 639
> > > +Silence is golden
> > > diff --git a/tests/generic/group b/tests/generic/group
> > > index 9a636b23..48ffa3c7 100644
> > > --- a/tests/generic/group
> > > +++ b/tests/generic/group
> > > @@ -641,3 +641,4 @@
> > > 636 auto quick swap
> > > 637 auto quick dir
> > > 638 auto quick rw
> > > +639 auto quick swap
> > > --
> > > 2.31.1
> > >
> >
>
prev parent reply other threads:[~2021-06-17 3:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-15 16:11 [PATCH v2] generic: test small swapfile without page-aligned contiguous blocks Zorro Lang
2021-06-17 0:17 ` Darrick J. Wong
2021-06-17 2:27 ` Zorro Lang
2021-06-17 3:06 ` Darrick J. Wong [this message]
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=20210617030602.GC158232@locust \
--to=djwong@kernel.org \
--cc=fstests@vger.kernel.org \
--cc=riteshh@linux.ibm.com \
/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.