@@ -924,14 +924,14 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
* the node tree. Thus, it must be fixed unconditionally
* in the memory (node_blk).
*/
- node_blk->i.i_flags &= ~cpu_to_le32(F2FS_COMPR_FL);
+ i_flags &= ~F2FS_COMPR_FL;
compressed = false;
if (c.fix_on) {
need_fix = 1;
FIX_MSG("[0x%x] i_flags=0x%x -> 0x%x",
- nid, i_flags, node_blk->i.i_flags);
+ nid, node_blk->i.i_flags, i_flags);
}
- i_flags &= ~F2FS_COMPR_FL;
+ node_blk->i.i_flags = cpu_to_le32(i_flags);
}
check_next:
memset(&child, 0, sizeof(child));
@@ -1057,7 +1057,8 @@ check_next:
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);
+ i_flags &= ~F2FS_CASEFOLD_FL;
+ node_blk->i.i_flags = cpu_to_le32(i_flags);
need_fix = 1;
}
}
@@ -62,7 +62,7 @@ int f2fs_rebuild_qf_inode(struct f2fs_sb_info *sbi, int qtype)
raw_node->i.i_size = cpu_to_le64(1024 * 6);
raw_node->i.i_blocks = cpu_to_le64(1);
- raw_node->i.i_flags = F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL;
+ raw_node->i.i_flags = cpu_to_le32(F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL);
if (is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG))
cp_ver |= (cur_cp_crc(ckpt) << 32);
@@ -659,9 +659,11 @@ enum {
/*
* On-disk inode flags (f2fs_inode::i_flags)
*/
+#define F2FS_COMPR_FL 0x00000004 /* Compress file */
+#define F2FS_NODUMP_FL 0x00000040 /* do not dump file */
#define F2FS_IMMUTABLE_FL 0x00000010 /* Immutable file */
#define F2FS_NOATIME_FL 0x00000080 /* do not update atime */
-
+#define F2FS_CASEFOLD_FL 0x40000000 /* Casefolded file */
#define F2FS_ENC_UTF8_12_1 1
#define F2FS_ENC_STRICT_MODE_FL (1 << 0)
@@ -984,9 +986,7 @@ static_assert(sizeof(struct node_footer) == 24, "");
#define file_is_encrypt(fi) ((fi)->i_advise & FADVISE_ENCRYPT_BIT)
#define file_enc_name(fi) ((fi)->i_advise & FADVISE_ENC_NAME_BIT)
-
-#define F2FS_CASEFOLD_FL 0x40000000 /* Casefolded file */
-#define IS_CASEFOLDED(dir) ((dir)->i_flags & F2FS_CASEFOLD_FL)
+#define IS_CASEFOLDED(dir) ((dir)->i_flags & cpu_to_le32(F2FS_CASEFOLD_FL))
/*
* fsck i_compr_blocks counting helper
@@ -1003,10 +1003,6 @@ struct f2fs_compr_blk_cnt {
};
#define CHEADER_PGOFS_NONE ((u32)-(1 << MAX_COMPRESS_LOG_SIZE))
-/*
- * inode flags
- */
-#define F2FS_COMPR_FL 0x00000004 /* Compress file */
/*
* On disk layout is
* struct f2fs_inode
@@ -1414,7 +1414,7 @@ static int f2fs_write_qf_inode(int qtype)
raw_node->i.i_size = cpu_to_le64(1024 * 6);
raw_node->i.i_blocks = cpu_to_le64(1 + QUOTA_DATA);
- raw_node->i.i_flags = F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL;
+ raw_node->i.i_flags = cpu_to_le32(F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL);
node_blkaddr = alloc_next_free_block(CURSEG_HOT_NODE);
F2FS_NODE_FOOTER(raw_node)->next_blkaddr = cpu_to_le32(node_blkaddr + 1);
This patch fixes some cases in where we missed to consider endianness when we access/update inode.i_flags. Signed-off-by: Chao Yu <chao@kernel.org> --- fsck/fsck.c | 9 +++++---- fsck/node.c | 2 +- include/f2fs_fs.h | 12 ++++-------- mkfs/f2fs_format.c | 2 +- 4 files changed, 11 insertions(+), 14 deletions(-)