public inbox for fstests@vger.kernel.org
 help / color / mirror / Atom feed
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.

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox