linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
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;
> >  }
> > 

      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).