On 08/06, Chao Yu wrote: > 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?
Ah, we don't need this option. > > "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