aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2020-10-08 21:07:45 -0700
committerJaegeuk Kim <jaegeuk@kernel.org>2020-12-07 09:25:13 -0800
commit8fd836f25fe268d62a630b93f0f9ece2fdba59b5 (patch)
tree0a6b28a9b44a4c6f2cfd567ca82607cd8ffba9cb
parent1a7415a9e25a0f5bc4d79d847e31f2779d01cf2c (diff)
downloadf2fs-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.c11
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)