This patch triggers the F2FS-related ioctl for godown. Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx> --- 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; } -- 2.1.1 -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html