aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaeho Jeong <daehojeong@google.com>2022-09-19 09:15:02 -0700
committerJaegeuk Kim <jaegeuk@kernel.org>2022-10-26 13:37:31 -0700
commit907b972756f8980fff128f7d864a5f7e63fb561d (patch)
treeb733b117041ead600b44bebaa2980cb3d1a9c57d
parent9ff70fb2149e29b86418c62532f56405ef063e82 (diff)
downloadf2fs-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.c31
-rw-r--r--tools/f2fs_io/f2fs_io.h1
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