From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Eric Sandeen <sandeen@sandeen.net>
Cc: Dave Chinner <david@fromorbit.com>,
fstests@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [PATCH 1/2] src/godown: support f2fs triggering specific ioctl
Date: Thu, 8 Jan 2015 12:09:07 -0800 [thread overview]
Message-ID: <20150108200907.GA74189@jaegeuk-mac02> (raw)
In-Reply-To: <54AED028.10101@sandeen.net>
On Thu, Jan 08, 2015 at 12:44:56PM -0600, Eric Sandeen wrote:
> On 1/8/15 12:31 PM, Jaegeuk Kim wrote:
> > This patch triggers the F2FS-related ioctl for godown.
>
> hohum, wouldn't it be a whole lot easier to just re-use the XFS ioctl
> number in f2fs? Then you wouldn't have to duplicate all this code.
Actually I tried to do like that. But, xfs's goingdown has some specific options
wrt flushing logs which provide some rules on data recovery.
So, I decided to add a new ioctl and a test script, (i.e., f2fs/087) which is
different from xfs/087.
>
> If you really want your own unique ioctl number, what about
> just doing statfs on the target, and if f_type returns F2FS_SUPER_MAGIC,
> swictch the ioctl nr to F2FS_IOC_GOINGDOWN.
Oh, I'll change detecting the file system type.
For the common ioctl, it needs to consider ioctl's format where xfs calls xfsctl
with flushing options while f2fs triggers ioctl without paramter.
>
> Then if not F2FS_SUPER_MAGIC, leave the ioctl nr at XFS_IOC_GOINGDOWN, and
> if it fails, it fails (other filesystems might support the original nr.)
>
> And then you can probably just add "f2fs" to the existing testcase,
> and move it to tests/shared?
I can't use the same scripts due to the different options used by xfs's
goingdown.
Thank you for the comments. :)
Thanks,
>
> -Eric
>
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> > src/godown.c | 88 ++++++++++++++++++++++++++++++++++++++++++++----------------
> > 1 file changed, 65 insertions(+), 23 deletions(-)
> >
> > diff --git a/src/godown.c b/src/godown.c
> > index b140a41..b44790b 100644
> > --- a/src/godown.c
> > +++ b/src/godown.c
> > @@ -19,33 +19,82 @@
> > #include <syslog.h>
> > #include "global.h"
> >
> > +#define F2FS_IOCTL_MAGIC 0xf5
> > +#define F2FS_IOC_GOINGDOWN _IO(F2FS_IOCTL_MAGIC, 6)
> > +
> > +enum ftypes {
> > + XFS_FS,
> > + F2FS_FS,
> > +};
> > +
> > static char *xprogname;
> > +static char *mnt_dir;
> > +static int verbose_opt = 0;
> > +static int flushlog_opt = 0;
> >
> > +static enum ftypes fs = XFS_FS;
> >
> > static void
> > usage(void)
> > {
> > - fprintf(stderr, "usage: %s [-f] [-v] mnt-dir\n", xprogname);
> > + fprintf(stderr, "usage: %s [-f] [-v] [-s 0/1] mnt-dir\n", xprogname);
> > +}
> > +
> > +static int
> > +xfs_goingdown(int fd)
> > +{
> > + int flag;
> > +
> > + flag = (flushlog_opt ? XFS_FSOP_GOING_FLAGS_LOGFLUSH
> > + : XFS_FSOP_GOING_FLAGS_NOLOGFLUSH);
> > + if (verbose_opt) {
> > + printf("Calling XFS_IOC_GOINGDOWN\n");
> > + }
> > +
> > + syslog(LOG_WARNING, "xfstests-induced forced shutdown of %s:\n",
> > + mnt_dir);
> > + if ((xfsctl(mnt_dir, fd, XFS_IOC_GOINGDOWN, &flag)) == -1) {
> > + fprintf(stderr, "%s: error on xfsctl(GOINGDOWN) of \"%s\": %s\n",
> > + xprogname, mnt_dir, strerror(errno));
> > + return 1;
> > + }
> > + return 0;
> > +}
> > +
> > +static int
> > +f2fs_goingdown(int fd)
> > +{
> > + if (verbose_opt) {
> > + printf("Calling F2FS_IOC_GOINGDOWN\n");
> > + }
> > + syslog(LOG_WARNING, "xfstests-induced forced shutdown of %s:\n",
> > + mnt_dir);
> > + if ((ioctl(fd, F2FS_IOC_GOINGDOWN)) == -1) {
> > + fprintf(stderr, "%s: error on ioctl(GOINGDOWN) of \"%s\": %s\n",
> > + xprogname, mnt_dir, strerror(errno));
> > + return 1;
> > + }
> > + return 0;
> > +
> > }
> >
> > int
> > main(int argc, char *argv[])
> > {
> > - int c;
> > - int flag;
> > - int flushlog_opt = 0;
> > - int verbose_opt = 0;
> > + int c, fd;
> > struct stat st;
> > - char *mnt_dir;
> > - int fd;
> > + int ret = 0;
> >
> > xprogname = argv[0];
> >
> > - while ((c = getopt(argc, argv, "fv")) != -1) {
> > + while ((c = getopt(argc, argv, "fs:v")) != -1) {
> > switch (c) {
> > case 'f':
> > flushlog_opt = 1;
> > break;
> > + case 's':
> > + fs = atoi(optarg);
> > + break;
> > case 'v':
> > verbose_opt = 1;
> > break;
> > @@ -94,10 +143,6 @@ main(int argc, char *argv[])
> > }
> > #endif
> >
> > -
> > - flag = (flushlog_opt ? XFS_FSOP_GOING_FLAGS_LOGFLUSH
> > - : XFS_FSOP_GOING_FLAGS_NOLOGFLUSH);
> > -
> > if (verbose_opt) {
> > printf("Opening \"%s\"\n", mnt_dir);
> > }
> > @@ -107,18 +152,15 @@ main(int argc, char *argv[])
> > return 1;
> > }
> >
> > - if (verbose_opt) {
> > - printf("Calling XFS_IOC_GOINGDOWN\n");
> > + switch (fs) {
> > + case XFS_FS:
> > + ret = xfs_goingdown(fd);
> > + break;
> > + case F2FS_FS:
> > + ret = f2fs_goingdown(fd);
> > + break;
> > }
> > - syslog(LOG_WARNING, "xfstests-induced forced shutdown of %s:\n",
> > - mnt_dir);
> > - if ((xfsctl(mnt_dir, fd, XFS_IOC_GOINGDOWN, &flag)) == -1) {
> > - fprintf(stderr, "%s: error on xfsctl(GOINGDOWN) of \"%s\": %s\n",
> > - xprogname, mnt_dir, strerror(errno));
> > - return 1;
> > - }
> > -
> > close(fd);
> >
> > - return 0;
> > + return ret;
> > }
> >
prev parent reply other threads:[~2015-01-08 20:09 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-08 18:31 [PATCH 1/2] src/godown: support f2fs triggering specific ioctl Jaegeuk Kim
2015-01-08 18:31 ` [PATCH 2/2] f2fs/087: test power failure test using godown Jaegeuk Kim
2015-01-08 18:44 ` [PATCH 1/2] src/godown: support f2fs triggering specific ioctl Eric Sandeen
2015-01-08 20:09 ` Jaegeuk Kim [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=20150108200907.GA74189@jaegeuk-mac02 \
--to=jaegeuk@kernel.org \
--cc=david@fromorbit.com \
--cc=fstests@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=sandeen@sandeen.net \
/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;
as well as URLs for NNTP newsgroup(s).