This patch triggers the F2FS-related ioctl for godown.

Signed-off-by: Jaegeuk Kim <jaeg...@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;
 }
-- 
2.1.1


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to