diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-11-06 19:34:40 -0800 |
---|---|---|
committer | JP Abgrall <jpa@google.com> | 2015-03-23 10:10:26 -0700 |
commit | c07795e73cbc509286e35193759e80d65ee12a44 (patch) | |
tree | ad84c5484be8c3aca3f7ec957a16f9b2891a50ac /fsck | |
parent | f54dd91d065c15b84686a3fde7a096786e368201 (diff) | |
download | android_external_f2fs-tools-c07795e73cbc509286e35193759e80d65ee12a44.tar.gz android_external_f2fs-tools-c07795e73cbc509286e35193759e80d65ee12a44.tar.bz2 android_external_f2fs-tools-c07795e73cbc509286e35193759e80d65ee12a44.zip |
fsck.f2fs: trigger fsck.f2fs when new change was made
This patch remains user specified triggering information in superblock.
Then, if the information was changed, fsck.f2fs is triggered.
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fsck')
-rw-r--r-- | fsck/mount.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/fsck/mount.c b/fsck/mount.c index 9a9c842..37bd8c7 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -133,6 +133,7 @@ void print_raw_sb_info(struct f2fs_sb_info *sbi) DISP_u32(sb, node_ino); DISP_u32(sb, meta_ino); DISP_u32(sb, cp_payload); + DISP("%s", sb, version); printf("\n"); } @@ -225,6 +226,7 @@ int sanity_check_raw_super(struct f2fs_super_block *raw_super) int validate_super_block(struct f2fs_sb_info *sbi, int block) { u64 offset; + sbi->raw_super = malloc(sizeof(struct f2fs_super_block)); if (block == 0) @@ -235,8 +237,35 @@ int validate_super_block(struct f2fs_sb_info *sbi, int block) if (dev_read(sbi->raw_super, offset, sizeof(struct f2fs_super_block))) return -1; - if (!sanity_check_raw_super(sbi->raw_super)) + if (!sanity_check_raw_super(sbi->raw_super)) { + /* get kernel version */ + if (config.kd >= 0) { + dev_read_version(config.version, 0, VERSION_LEN); + get_kernel_version(config.version); + } else { + memset(config.version, 0, VERSION_LEN); + } + + /* build sb version */ + memcpy(config.sb_version, sbi->raw_super->version, VERSION_LEN); + get_kernel_version(config.sb_version); + + MSG(0, "Info: FSCK version\n from \"%s\"\n to \"%s\"\n", + config.sb_version, config.version); + if (memcmp(config.sb_version, config.version, VERSION_LEN)) { + int ret; + + memcpy(sbi->raw_super->version, + config.version, VERSION_LEN); + ret = dev_write(sbi->raw_super, offset, + sizeof(struct f2fs_super_block)); + ASSERT(ret >= 0); + + config.auto_fix = 0; + config.fix_on = 1; + } return 0; + } free(sbi->raw_super); MSG(0, "\tCan't find a valid F2FS superblock at 0x%x\n", block); |