diff options
author | Yangtao Li <frank.li@vivo.com> | 2023-06-13 14:59:10 +0800 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2023-06-19 23:42:30 -0700 |
commit | c05ab3493c3dc65ce984bf78a36d25c6506790bc (patch) | |
tree | 780e7b29e7c742e512321b357ad8148cda0a7123 | |
parent | c5835f689147d140b18e72d71365071d0c6fa63e (diff) | |
download | f2fs-tools-c05ab3493c3dc65ce984bf78a36d25c6506790bc.tar.gz |
f2fs_io: expend fallocate command
Expend fallocate command to support more flags.
Signed-off-by: Yangtao Li <frank.li@vivo.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r-- | man/f2fs_io.8 | 19 | ||||
-rw-r--r-- | tools/f2fs_io/f2fs_io.c | 39 |
2 files changed, 51 insertions, 7 deletions
diff --git a/man/f2fs_io.8 b/man/f2fs_io.8 index c5eadde..450f1b7 100644 --- a/man/f2fs_io.8 +++ b/man/f2fs_io.8 @@ -43,10 +43,27 @@ going down with fsck mark \fBpinfile\fR \fI[get|set] [file]\fR Get or set the pinning status on a file. .TP -\fBfallocate\fR \fI[keep_size] [offset] [length] [file]\fR +\fBfallocate\fR \fI[-c] [-i] [-p] [-z] [keep_size] [offset] [length] [file]\fR Request that space be allocated on a file. The .I keep_size parameter can be either 1 or 0. +The +.I pattern +parameter can be: +.RS 1.2in +.TP +.B -c +collapse range +.TP +.B -i +insert range +.TP +.B -p +punch hole +.TP +.B -z +zero range +.RE .TP \fBwrite\fR \fI[chunk_size in 4kb] [offset in chunk_size] [count] [pattern] [IO] [file_path]\fR Write a given pattern to diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index 1774eca..b4e7307 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -413,9 +413,13 @@ static void do_pinfile(int argc, char **argv, const struct cmd_desc *cmd) #define fallocate_desc "fallocate" #define fallocate_help \ -"f2fs_io fallocate [keep_size] [offset] [length] [file]\n\n" \ +"f2fs_io fallocate [-c] [-i] [-p] [-z] [keep_size] [offset] [length] [file]\n\n" \ "fallocate given the file\n" \ " [keep_size] : 1 or 0\n" \ +" -c : collapse range\n" \ +" -i : insert range\n" \ +" -p : punch hole\n" \ +" -z : zero range\n" \ static void do_fallocate(int argc, char **argv, const struct cmd_desc *cmd) { @@ -423,20 +427,43 @@ static void do_fallocate(int argc, char **argv, const struct cmd_desc *cmd) off_t offset, length; struct stat sb; int mode = 0; + int c; - if (argc != 5) { + while ((c = getopt(argc, argv, "cipz")) != -1) { + switch (c) { + case 'c': + mode |= FALLOC_FL_COLLAPSE_RANGE; + break; + case 'i': + mode |= FALLOC_FL_INSERT_RANGE; + break; + case 'p': + mode |= FALLOC_FL_PUNCH_HOLE; + break; + case 'z': + mode |= FALLOC_FL_ZERO_RANGE; + break; + default: + fputs(cmd->cmd_help, stderr); + exit(2); + } + } + argc -= optind; + argv += optind; + + if (argc != 4) { fputs("Excess arguments\n\n", stderr); fputs(cmd->cmd_help, stderr); exit(1); } - if (!strcmp(argv[1], "1")) + if (!strcmp(argv[0], "1")) mode |= FALLOC_FL_KEEP_SIZE; - offset = atoi(argv[2]); - length = atoll(argv[3]); + offset = atoi(argv[1]); + length = atoll(argv[2]); - fd = xopen(argv[4], O_RDWR, 0); + fd = xopen(argv[3], O_RDWR, 0); if (fallocate(fd, mode, offset, length) != 0) die_errno("fallocate failed"); |