diff options
author | Daeho Jeong <daehojeong@google.com> | 2022-09-19 09:15:02 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2022-10-26 13:37:31 -0700 |
commit | 907b972756f8980fff128f7d864a5f7e63fb561d (patch) | |
tree | b733b117041ead600b44bebaa2980cb3d1a9c57d | |
parent | 9ff70fb2149e29b86418c62532f56405ef063e82 (diff) | |
download | f2fs-tools-907b972756f8980fff128f7d864a5f7e63fb561d.tar.gz |
f2fs-tools: support F2FS_IOC_START_ATOMIC_REPLACE
Added options in f2fs_io write command to support
F2FS_IOC_START_ATOMIC_REPLACE.
Signed-off-by: Daeho Jeong <daehojeong@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r-- | tools/f2fs_io/f2fs_io.c | 31 | ||||
-rw-r--r-- | tools/f2fs_io/f2fs_io.h | 1 |
2 files changed, 23 insertions, 9 deletions
diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index 5be7b9e..6dcd840 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -513,7 +513,9 @@ static void do_erase(int argc, char **argv, const struct cmd_desc *cmd) " osync : O_SYNC\n" \ " atomic_commit : atomic write & commit\n" \ " atomic_abort : atomic write & abort\n" \ -"{delay} is in ms unit and optional only for atomic_commit and atomic_abort\n" +" atomic_rcommit: atomic replace & commit\n" \ +" atomic_rabort : atomic replace & abort\n" \ +"{delay} is in ms unit and optional only for atomic operations\n" static void do_write(int argc, char **argv, const struct cmd_desc *cmd) { @@ -524,7 +526,7 @@ static void do_write(int argc, char **argv, const struct cmd_desc *cmd) int flags = 0; int fd; u64 total_time = 0, max_time = 0, max_time_t = 0; - bool atomic_commit = false, atomic_abort = false; + bool atomic_commit = false, atomic_abort = false, replace = false; int useconds = 0; srand(time(0)); @@ -551,18 +553,25 @@ static void do_write(int argc, char **argv, const struct cmd_desc *cmd) else if (strcmp(argv[4], "inc_num") && strcmp(argv[4], "rand")) die("Wrong pattern type"); - if (!strcmp(argv[5], "dio")) + if (!strcmp(argv[5], "dio")) { flags |= O_DIRECT; - else if (!strcmp(argv[5], "dsync")) + } else if (!strcmp(argv[5], "dsync")) { flags |= O_DIRECT | O_DSYNC; - else if (!strcmp(argv[5], "osync")) + } else if (!strcmp(argv[5], "osync")) { flags |= O_SYNC; - else if (!strcmp(argv[5], "atomic_commit")) + } else if (!strcmp(argv[5], "atomic_commit")) { atomic_commit = true; - else if (!strcmp(argv[5], "atomic_abort")) + } else if (!strcmp(argv[5], "atomic_abort")) { atomic_abort = true; - else if (strcmp(argv[5], "buffered")) + } else if (!strcmp(argv[5], "atomic_rcommit")) { + atomic_commit = true; + replace = true; + } else if (!strcmp(argv[5], "atomic_rabort")) { + atomic_abort = true; + replace = true; + } else if (strcmp(argv[5], "buffered")) { die("Wrong IO type"); + } fd = xopen(argv[6], O_CREAT | O_WRONLY | flags, 0755); @@ -572,7 +581,11 @@ static void do_write(int argc, char **argv, const struct cmd_desc *cmd) if (argc == 8) useconds = atoi(argv[7]) * 1000; - ret = ioctl(fd, F2FS_IOC_START_ATOMIC_WRITE); + if (replace) + ret = ioctl(fd, F2FS_IOC_START_ATOMIC_REPLACE); + else + ret = ioctl(fd, F2FS_IOC_START_ATOMIC_WRITE); + if (ret < 0) { fputs("setting atomic file mode failed\n", stderr); exit(1); diff --git a/tools/f2fs_io/f2fs_io.h b/tools/f2fs_io/f2fs_io.h index bd8db0b..58be8f8 100644 --- a/tools/f2fs_io/f2fs_io.h +++ b/tools/f2fs_io/f2fs_io.h @@ -90,6 +90,7 @@ typedef u32 __be32; struct f2fs_comp_option) #define F2FS_IOC_DECOMPRESS_FILE _IO(F2FS_IOCTL_MAGIC, 23) #define F2FS_IOC_COMPRESS_FILE _IO(F2FS_IOCTL_MAGIC, 24) +#define F2FS_IOC_START_ATOMIC_REPLACE _IO(F2FS_IOCTL_MAGIC, 25) #ifndef FSCRYPT_POLICY_V1 #define FSCRYPT_POLICY_V1 0 |