From: Daeho Jeong <[email protected]>

This commit adds a new 'dev_alias' command to f2fs_io tool to support
dynamic inclusion, exclusion and status querying of device alias ranges.

Signed-off-by: Daeho Jeong <[email protected]>
---
v2: remove a f2fs specific flag from getflags.
---
 tools/f2fs_io/f2fs_io.c | 46 +++++++++++++++++++++++++++++++++++++++++
 tools/f2fs_io/f2fs_io.h |  7 +++++++
 2 files changed, 53 insertions(+)

diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c
index c977f4d..3fa323b 100644
--- a/tools/f2fs_io/f2fs_io.c
+++ b/tools/f2fs_io/f2fs_io.c
@@ -2509,6 +2509,51 @@ static void do_test_lookup_perf(int argc, char **argv, 
const struct cmd_desc *cm
        exit(0);
 }
 
+#define dev_alias_desc "device alias control"
+#define dev_alias_help                                         \
+"f2fs_io dev_alias [include|exclude|status] [file]\n\n"                        
\
+"include, exclude or status a range of device alias given the file\n"
+
+static void do_dev_alias(int argc, char **argv, const struct cmd_desc *cmd)
+{
+       int fd, ret;
+
+       if (argc != 3) {
+               fputs("Excess arguments\n\n", stderr);
+               fputs(cmd->cmd_help, stderr);
+               exit(1);
+       }
+
+       fd = xopen(argv[2], O_RDWR, 0);
+
+       if (!strcmp(argv[1], "exclude")) {
+               ret = ioctl(fd, F2FS_IOC_EXCLUDE_DEV_ALIAS);
+               if (ret < 0)
+                       die_errno("F2FS_IOC_EXCLUDE_DEV_ALIAS failed");
+               printf("%s device alias range of %s\n", argv[1], argv[2]);
+       } else if (!strcmp(argv[1], "include")) {
+               ret = ioctl(fd, F2FS_IOC_INCLUDE_DEV_ALIAS);
+               if (ret < 0)
+                       die_errno("F2FS_IOC_INCLUDE_DEV_ALIAS failed");
+               printf("%s device alias range of %s\n", argv[1], argv[2]);
+       } else if (!strcmp(argv[1], "status")) {
+               u32 status = 0;
+
+               ret = ioctl(fd, F2FS_IOC_GET_DEV_ALIAS_STATUS, &status);
+               if (ret < 0)
+                       die_errno("F2FS_IOC_GET_DEV_ALIAS_STATUS failed");
+
+               printf("device alias status of %s: %s\n", argv[2],
+                       status == F2FS_DEV_ALIAS_STATUS_EXCLUDED ? "excluded" : 
"included");
+       } else {
+               fputs("Wrong request type\n\n", stderr);
+               fputs(cmd->cmd_help, stderr);
+               exit(1);
+       }
+
+       exit(0);
+}
+
 #define freeze_desc "freeze filesystem"
 #define freeze_help "f2fs_io freeze [directory_path]\n\n"
 
@@ -2603,6 +2648,7 @@ const struct cmd_desc cmd_list[] = {
        CMD(get_advise),
        CMD(ioprio),
        CMD(ftruncate),
+       CMD(dev_alias),
        CMD(test_create_perf),
        CMD(test_lookup_perf),
        CMD(freeze),
diff --git a/tools/f2fs_io/f2fs_io.h b/tools/f2fs_io/f2fs_io.h
index b0d4099..57d96b7 100644
--- a/tools/f2fs_io/f2fs_io.h
+++ b/tools/f2fs_io/f2fs_io.h
@@ -96,6 +96,9 @@ typedef u32   __be32;
 #define F2FS_IOC_START_ATOMIC_REPLACE  _IO(F2FS_IOCTL_MAGIC, 25)
 #define F2FS_IOC_GET_DEV_ALIAS_FILE    _IOR(F2FS_IOCTL_MAGIC, 26, __u32)
 #define F2FS_IOC_IO_PRIO               _IOW(F2FS_IOCTL_MAGIC, 27, __u32)
+#define F2FS_IOC_EXCLUDE_DEV_ALIAS     _IO(F2FS_IOCTL_MAGIC, 28)
+#define F2FS_IOC_INCLUDE_DEV_ALIAS     _IO(F2FS_IOCTL_MAGIC, 29)
+#define F2FS_IOC_GET_DEV_ALIAS_STATUS  _IOR(F2FS_IOCTL_MAGIC, 30, __u32)
 
 #ifndef FSCRYPT_POLICY_V1
 #define FSCRYPT_POLICY_V1              0
@@ -200,6 +203,10 @@ enum {
        F2FS_IOPRIO_WRITE = 1,  /* high write priority */
 };
 
+/* for F2FS_IOC_GET_DEV_ALIAS_STATUS */
+#define F2FS_DEV_ALIAS_STATUS_INCLUDED 0
+#define F2FS_DEV_ALIAS_STATUS_EXCLUDED 1
+
 #ifndef FS_IMMUTABLE_FL
 #define FS_IMMUTABLE_FL                        0x00000010 /* Immutable file */
 #endif
-- 
2.54.0.1032.g2f8565e1d1-goog



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to