f2fs_io: support triggering filesystem GC via ioctl

Support 'gc' sub command to trigger filesystem GC via ioctl in f2fs.

Signed-off-by: Chao Yu <chao.yu@oppo.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
Chao Yu 2022-07-27 23:09:25 +08:00 committed by sunshenshen
parent 434d856c8c
commit aaf8c8720b
2 changed files with 31 additions and 0 deletions

View File

@ -132,6 +132,9 @@ Release compressed blocks to get free space.
.TP .TP
\fBreserve_cblocks\fR \fI[file]\fR \fBreserve_cblocks\fR \fI[file]\fR
Reserve free blocks to prepare decompressing blocks in the file. Reserve free blocks to prepare decompressing blocks in the file.
.TP
\fBgc\fR \fI[sync_mode] [file]\fR
Trigger filesystem GC
.SH AUTHOR .SH AUTHOR
This version of This version of
.B f2fs_io .B f2fs_io

View File

@ -1270,6 +1270,33 @@ static void do_rename(int argc, char **argv, const struct cmd_desc *cmd)
exit(0); exit(0);
} }
#define gc_desc "trigger filesystem GC"
#define gc_help "f2fs_io gc sync_mode [file_path]\n\n"
static void do_gc(int argc, char **argv, const struct cmd_desc *cmd)
{
u32 sync;
int ret, fd;
if (argc != 3) {
fputs("Excess arguments\n\n", stderr);
fputs(cmd->cmd_help, stderr);
exit(1);
}
sync = atoi(argv[1]);
fd = xopen(argv[2], O_RDONLY, 0);
ret = ioctl(fd, F2FS_IOC_GARBAGE_COLLECT, &sync);
if (ret < 0)
die_errno("F2FS_IOC_GARBAGE_COLLECT failed");
printf("trigger %s gc ret=%d\n",
sync ? "synchronous" : "asynchronous", ret);
exit(0);
}
#define CMD_HIDDEN 0x0001 #define CMD_HIDDEN 0x0001
#define CMD(name) { #name, do_##name, name##_desc, name##_help, 0 } #define CMD(name) { #name, do_##name, name##_desc, name##_help, 0 }
#define _CMD(name) { #name, do_##name, NULL, NULL, CMD_HIDDEN } #define _CMD(name) { #name, do_##name, NULL, NULL, CMD_HIDDEN }
@ -1301,6 +1328,7 @@ const struct cmd_desc cmd_list[] = {
CMD(compress), CMD(compress),
CMD(get_filename_encrypt_mode), CMD(get_filename_encrypt_mode),
CMD(rename), CMD(rename),
CMD(gc),
{ NULL, NULL, NULL, NULL, 0 } { NULL, NULL, NULL, NULL, 0 }
}; };