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

Reply via email to