diff options
author | Eric Biggers <ebiggers@google.com> | 2020-10-08 21:07:45 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2020-12-07 09:25:13 -0800 |
commit | 8fd836f25fe268d62a630b93f0f9ece2fdba59b5 (patch) | |
tree | 0a6b28a9b44a4c6f2cfd567ca82607cd8ffba9cb | |
parent | 1a7415a9e25a0f5bc4d79d847e31f2779d01cf2c (diff) | |
download | f2fs-tools-8fd836f25fe268d62a630b93f0f9ece2fdba59b5.tar.gz |
fsck: clear unexpected casefold flags
Inodes aren't allowed to have the casefold flag set when they aren't
directories, or if the filesystem superblock doesn't have the casefold
feature enabled. Clear any such unexpected casefold flags.
Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r-- | fsck/fsck.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fsck/fsck.c b/fsck/fsck.c index f97e9fb..6475233 100644 --- a/fsck/fsck.c +++ b/fsck/fsck.c @@ -790,6 +790,17 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid, } ofs = get_extra_isize(node_blk); + if ((node_blk->i.i_flags & cpu_to_le32(F2FS_CASEFOLD_FL)) && + (ftype != F2FS_FT_DIR || + !(c.feature & cpu_to_le32(F2FS_FEATURE_CASEFOLD)))) { + ASSERT_MSG("[0x%x] unexpected casefold flag", nid); + if (c.fix_on) { + FIX_MSG("ino[0x%x] clear casefold flag", nid); + node_blk->i.i_flags &= ~cpu_to_le32(F2FS_CASEFOLD_FL); + need_fix = 1; + } + } + if ((node_blk->i.i_inline & F2FS_INLINE_DATA)) { unsigned int inline_size = MAX_INLINE_DATA(node_blk); if (cur_qtype != -1) |