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. This corresponds to the F2FS_IOC_EXCLUDE_DEV_ALIAS, F2FS_IOC_INCLUDE_DEV_ALIAS and F2FS_IOC_GET_DEV_ALIAS_STATUS ioctls introduced in the kernel.
It also updates 'getflags' to support displaying the device aliasing flag. Signed-off-by: Daeho Jeong <[email protected]> --- tools/f2fs_io/f2fs_io.c | 55 ++++++++++++++++++++++++++++++++++++++++- tools/f2fs_io/f2fs_io.h | 10 ++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index c977f4d..413a47d 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -251,7 +251,8 @@ static void do_set_verity(int argc, char **argv, const struct cmd_desc *cmd) " casefold\n" \ " compression\n" \ " nocompression\n" \ -" immutable\n" +" immutable\n" \ +" dev_alias\n" static void do_getflags(int argc, char **argv, const struct cmd_desc *cmd) { @@ -317,6 +318,12 @@ static void do_getflags(int argc, char **argv, const struct cmd_desc *cmd) printf("immutable"); exist = 1; } + if (flag & FS_DEVICE_ALIAS_FL) { + if (exist) + printf(","); + printf("dev_alias"); + exist = 1; + } if (!exist) printf("none"); printf("\n"); @@ -2509,6 +2516,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 +2655,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..9e7e067 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 @@ -225,6 +232,9 @@ enum { #ifndef FS_CASEFOLD_FL #define FS_CASEFOLD_FL 0x40000000 /* Folder is case insensitive */ #endif +#ifndef FS_DEVICE_ALIAS_FL +#define FS_DEVICE_ALIAS_FL 0x80000000 /* Device aliasing file */ +#endif #ifndef RWF_DONTCACHE #define RWF_DONTCACHE 0x00000080 /* Uncached buffered IO. */ -- 2.54.0.1032.g2f8565e1d1-goog _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
