From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Jeffle Xu <jefflexu@linux.alibaba.com>,
fstests <fstests@vger.kernel.org>
Subject: Re: [PATCH v2] generic/530: fix shutdown failure of generic/530 in overlay
Date: Mon, 20 May 2019 14:34:54 -0700 [thread overview]
Message-ID: <20190520213454.GC5334@magnolia> (raw)
In-Reply-To: <CAOQ4uxjbs_YBoikMpntcPtw==n2+R8HAQk+E3BWN4gt1fXf_kg@mail.gmail.com>
On Mon, May 20, 2019 at 10:29:55PM +0300, Amir Goldstein wrote:
> On Mon, May 20, 2019 at 9:18 PM Darrick J. Wong <darrick.wong@oracle.com> wrote:
> >
> > On Mon, May 13, 2019 at 02:11:05PM +0800, Jeffle Xu wrote:
> > > Testcases are recommended to use _require_scratch_shutdown()
> > > and _scratch_shutdown() pair helper function to test and execute
> > > shutdown.
> > >
> > > generic/530 formmerly used _require_scratch_shutdown() to test
> > > whether the filesystem supports shutdown or not, while executed
> > > the shutdown action in a raw binary (src/t_open_tmpfiles) rather
> > > than the recommended _scratch_shutdown() helper. This will cause
> > > a "shutdown: Inappropriate ioctl for device" error message when
> > > testing overlay filesystem.
> > >
> > > This patch simply move the shutdown action from the raw binary
> > > into the packaged _scratch_shutdown() helper. That is, we remove
> > > the "shutdown" interface of t_open_tmpfiles.c and call
> > > _scratch_shutdown() in genric/530 and xfs/501.
> > >
> > > thx
> > >
> > > Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com>
> > > ---
> > > src/t_open_tmpfiles.c | 19 -------------------
> > > tests/generic/530 | 4 +++-
> > > tests/xfs/501 | 4 +++-
> > > 3 files changed, 6 insertions(+), 21 deletions(-)
> > >
> > > diff --git a/src/t_open_tmpfiles.c b/src/t_open_tmpfiles.c
> > > index da9390f..0393c6b 100644
> > > --- a/src/t_open_tmpfiles.c
> > > +++ b/src/t_open_tmpfiles.c
> > > @@ -24,7 +24,6 @@ static int min_fd = -1;
> > > static int max_fd = -1;
> > > static unsigned int nr_opened = 0;
> > > static float start_time;
> > > -static int shutdown_fs = 0;
> > >
> > > void clock_time(float *time)
> > > {
> > > @@ -69,22 +68,6 @@ void die(void)
> > > end_time - start_time);
> > > fflush(stdout);
> > >
> > > - if (shutdown_fs) {
> > > - /*
> > > - * Flush the log so that we have to process the
> > > - * unlinked inodes the next time we mount.
> > > - */
> > > - int flag = XFS_FSOP_GOING_FLAGS_LOGFLUSH;
> > > - int ret;
> > > -
> > > - ret = ioctl(min_fd, XFS_IOC_GOINGDOWN, &flag);
> > > - if (ret) {
> > > - perror("shutdown");
> > > - exit(2);
> > > - }
> > > - exit(0);
> > > - }
> > > -
> > > clock_time(&start_time);
> > > for (fd = min_fd; fd <= max_fd; fd++)
> > > close(fd);
> > > @@ -160,8 +143,6 @@ int main(int argc, char *argv[])
> > > if (ret)
> > > perror(argv[1]);
> > > }
> > > - if (argc > 2 && !strcmp(argv[2], "shutdown"))
> > > - shutdown_fs = 1;
> > >
> > > clock_time(&start_time);
> > > while (1)
> > > diff --git a/tests/generic/530 b/tests/generic/530
> > > index b0d188b..56c6d32 100755
> > > --- a/tests/generic/530
> > > +++ b/tests/generic/530
> > > @@ -49,7 +49,9 @@ ulimit -n $max_files
> > >
> > > # Open a lot of unlinked files
> > > echo create >> $seqres.full
> > > -$here/src/t_open_tmpfiles $SCRATCH_MNT shutdown >> $seqres.full
> > > +$here/src/t_open_tmpfiles $SCRATCH_MNT >> $seqres.full
> > > +_scratch_shutdown -f
> > > +
> > >
> > > # Unmount to prove that we can clean it all
> > > echo umount >> $seqres.full
> > > diff --git a/tests/xfs/501 b/tests/xfs/501
> > > index 974f341..4be9997 100755
> > > --- a/tests/xfs/501
> > > +++ b/tests/xfs/501
> > > @@ -54,7 +54,9 @@ ulimit -n $max_files
> > >
> > > # Open a lot of unlinked files
> > > echo create >> $seqres.full
> > > -$here/src/t_open_tmpfiles $SCRATCH_MNT shutdown >> $seqres.full
> > > +$here/src/t_open_tmpfiles $SCRATCH_MNT >> $seqres.full
> > > +_scratch_shutdown -f
> >
> > NAK.
> >
> > The whole point of both of these tests is to check the operation of
> > unlinked inode recovery after filesystem failure. Moving the shutdown
> > call so that it happens after t_open_tmpfiles exits and releases all the
> > fds renders both tests completely broken and pointless.
> >
> > The _require_scratch_shutdown behavior overlayfs (as I was hinting
> > before I left for vacation) is not particularly intuitive, and the next
> > step ought to have been "Ok, the helpers' behavior is intentional and
> > any program that wants to test shutdown has to use a file on the lower
> > fs; how do we pass the necessary control handle to t_open_tmpfiles", not
> > ripping out the offending code without figuring out what the test
> > actually does.
> >
> > IOWS,
> >
> > _scratch_shutdown_handle() {
> > if [ $FSTYP = "overlayfs" ]; then
> > echo "$OVL_BASE_SCRATCH_MNT"
> > else
> > echo "$SCRATCH_MNT"
> > fi
> > }
> >
> > $here/src/t_open_tmpfiles $SCRATCH_MNT shutdown $(_scratch_shutdown_handle)
> >
>
> That sounds reasonable to me.
>
> As a side note, overlayfs doesn't support O_TMPFILE.
> I am not sure if there is any filesystem that doesn't support
> O_TMPFILE which gains
> important coverage from the !try_o_tmpfile code??
>
> If there isn't, we could just require O_TMPFILE support and be done with that,
> but I guess if we got this far...
If the program can't create unlinked files the easy way (via O_TMPFILE)
then it'll create them the hard way by opening a new file and unlinking
it, which is how it works on overlayfs. It probably should've been
named t_open_unlinkedfiles or something...
> > Oh, it's already upstream, I'll send a revert later <grumble>...
> >
>
> Hmm, I had a bad feeling about this one.
> I should have said CC-and-wait-for-ack-by Darick.
:0
--D
> Thanks,
> Amir.
next prev parent reply other threads:[~2019-05-20 21:37 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-13 6:11 [PATCH v2] generic/530: fix shutdown failure of generic/530 in overlay Jeffle Xu
2019-05-13 8:34 ` Amir Goldstein
2019-05-20 16:28 ` Darrick J. Wong
2019-05-20 19:29 ` Amir Goldstein
2019-05-20 21:34 ` Darrick J. Wong [this message]
2019-05-24 9:57 ` Eryu Guan
-- strict thread matches above, loose matches on Subject: below --
2019-05-09 5:26 [PATCH] " Jeffle Xu
2019-05-10 3:17 ` [PATCH v2] " Jeffle Xu
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=20190520213454.GC5334@magnolia \
--to=darrick.wong@oracle.com \
--cc=amir73il@gmail.com \
--cc=fstests@vger.kernel.org \
--cc=jefflexu@linux.alibaba.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.