On 2019/7/27 23:44, Chao Yu wrote: > From: Chao Yu <yuch...@huawei.com> > > Support 'defrag_file' sub command to trigger file based defragment via > ioctl in f2fs. > > Signed-off-by: Chao Yu <yuch...@huawei.com> > --- > v2: > - remove unneeded debug info. > - fix compile warning.
Sorry I sent the old one... I add -v option, but w/o implement the details, because I just see generic/018 want this, also other filesystem utils have this option, not sure we should remove this option... any thoughts? "f2fs_io defrag_file [start] [length] [-v] [file_path]\n\n" > tools/f2fs_io/f2fs_io.c | 41 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 41 insertions(+) > > diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c > index f087da4..59ef8a7 100644 > --- a/tools/f2fs_io/f2fs_io.c > +++ b/tools/f2fs_io/f2fs_io.c > @@ -442,6 +442,46 @@ static void do_gc_urgent(int argc, char **argv, const > struct cmd_desc *cmd) > } > } > > +#define defrag_file_desc "do defragment on file" > +#define defrag_file_help \ > +"f2fs_io defrag_file [start] [length] [-v] [file_path]\n\n" \ > +" start : start offset of defragment region, unit: bytes\n" \ > +" length : bytes number of defragment region\n" \ > +" -v : be verbose\n" \ > + > +static void do_defrag_file(int argc, char **argv, const struct cmd_desc *cmd) > +{ > + struct f2fs_defragment df; > + u64 len; > + int ret, fd; > + > + if (argc != 5) { > + fputs("Excess arguments\n\n", stderr); > + fputs(cmd->cmd_help, stderr); > + exit(1); > + } > + > + df.start = atoll(argv[1]); > + df.len = len = atoll(argv[2]); > + > + fd = open(argv[4], O_RDWR); > + if (fd == -1) { > + fputs("Open failed\n\n", stderr); > + fputs(cmd->cmd_help, stderr); > + exit(1); > + } > +printf("%lu, %lu\n", df.start, df.len); > + ret = ioctl(fd, F2FS_IOC_DEFRAGMENT, &df); > + if (ret < 0) { > + perror("F2FS_IOC_DEFRAGMENT"); > + exit(1); > + } > + printf("defrag %s in region[%lu, %lu]\n", argv[3], > + df.start, df.start + len); > + exit(0); > +} > + > + > #define CMD_HIDDEN 0x0001 > #define CMD(name) { #name, do_##name, name##_desc, name##_help, 0 } > #define _CMD(name) { #name, do_##name, NULL, NULL, CMD_HIDDEN } > @@ -456,6 +496,7 @@ const struct cmd_desc cmd_list[] = { > CMD(read), > CMD(fiemap), > CMD(gc_urgent), > + CMD(defrag_file), > { NULL, NULL, NULL, NULL, 0 } > }; > > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel