On 2017/10/31 9:38, Sheng Yong wrote: > With --dry-run enabled, fsck.f2fs will do all checks and "fixes" except > that all fixes will not be written to storage at last. > > Signed-off-by: Sheng Yong <shengyo...@huawei.com> > --- > fsck/main.c | 14 +++++++++++++- > include/f2fs_fs.h | 1 + > lib/libf2fs.c | 1 + > lib/libf2fs_io.c | 3 +++ > 4 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/fsck/main.c b/fsck/main.c > index 93037e1..baa8efc 100644 > --- a/fsck/main.c > +++ b/fsck/main.c > @@ -18,6 +18,7 @@ > #include "fsck.h" > #include <libgen.h> > #include <ctype.h> > +#include <getopt.h> > > struct f2fs_fsck gfsck; > > @@ -30,6 +31,7 @@ void fsck_usage() > MSG(0, " -f check/fix entire partition\n"); > MSG(0, " -p preen mode [default:0 the same as -a [0|1]]\n"); > MSG(0, " -t show directory tree\n"); > + MSG(0, " --dry-run do not really fix corruptions\n"); > exit(1); > } > > @@ -117,10 +119,20 @@ void f2fs_parse_options(int argc, char *argv[]) > > if (!strcmp("fsck.f2fs", prog)) { > const char *option_string = ":ad:fp:t"; > + int opt = 0; > + struct option long_opt[] = { > + {"dry-run", no_argument, 0, 1}, > + {0, 0, 0, 0} > + }; > > c.func = FSCK; > - while ((option = getopt(argc, argv, option_string)) != EOF) { > + while ((option = getopt_long(argc, argv, option_string, > + long_opt, &opt)) != EOF) { > switch (option) { > + case 1: > + c.dry_run = 1; > + MSG(0, "Info: Dry run\n"); > + break; > case 'a': > c.auto_fix = 1; > MSG(0, "Info: Fix the reported corruption.\n"); > diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h > index e1e299d..64a796d 100644 > --- a/include/f2fs_fs.h > +++ b/include/f2fs_fs.h > @@ -300,6 +300,7 @@ struct f2fs_configuration { > int trimmed; > int func; > void *private; > + int dry_run; > int fix_on; > int bug_on; > int auto_fix; > diff --git a/lib/libf2fs.c b/lib/libf2fs.c > index 69f5ccc..259bd17 100644 > --- a/lib/libf2fs.c > +++ b/lib/libf2fs.c > @@ -598,6 +598,7 @@ void f2fs_init_configuration(void) > c.trimmed = 0; > c.ro = 0; > c.kd = -1; > + c.dry_run = 0; > } > > static int is_mounted(const char *mpt, const char *device) > diff --git a/lib/libf2fs_io.c b/lib/libf2fs_io.c > index 50ff171..8a79672 100644 > --- a/lib/libf2fs_io.c > +++ b/lib/libf2fs_io.c > @@ -129,6 +129,9 @@ int dev_write(void *buf, __u64 offset, size_t len) > { > int fd; > > + if (c.dry_run) > + return 0; > + > if (c.sparse_mode) > return dev_write_sparse(buf, offset, len);
Do we need to cover dev_write_block? Thanks, > > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel