Message ID | 20230506114537.49470-2-frank.li@vivo.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [f2fs-dev] f2fs_io: expend fallocate command | expand |
On 2023/5/6 19:45, Yangtao Li wrote: > Expend fallocate command to support more flags. > > Signed-off-by: Yangtao Li <frank.li@vivo.com> > --- > tools/f2fs_io/f2fs_io.c | 37 ++++++++++++++++++++++++++++++++----- > 1 file changed, 32 insertions(+), 5 deletions(-) > > diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c > index 126e1f9..1be8c9e 100644 > --- a/tools/f2fs_io/f2fs_io.c > +++ b/tools/f2fs_io/f2fs_io.c > @@ -416,6 +416,10 @@ static void do_pinfile(int argc, char **argv, const struct cmd_desc *cmd) > "f2fs_io fallocate [keep_size] [offset] [length] [file]\n\n" \ It needs to update above description, and manual as well? f2fs_io fallocate [-cipz] [keep_size] [offset] [length] [file] Thanks, > "fallocate given the file\n" \ > " [keep_size] : 1 or 0\n" \ > +" -p : punch hole\n" \ > +" -c : collapse range\n" \ > +" -z : zero range\n" \ > +" -i : insert 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");
diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index 126e1f9..1be8c9e 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -416,6 +416,10 @@ static void do_pinfile(int argc, char **argv, const struct cmd_desc *cmd) "f2fs_io fallocate [keep_size] [offset] [length] [file]\n\n" \ "fallocate given the file\n" \ " [keep_size] : 1 or 0\n" \ +" -p : punch hole\n" \ +" -c : collapse range\n" \ +" -z : zero range\n" \ +" -i : insert 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");
Expend fallocate command to support more flags. Signed-off-by: Yangtao Li <frank.li@vivo.com> --- tools/f2fs_io/f2fs_io.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-)