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

Reply via email to