mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git
synced 2024-11-23 17:53:39 +08:00
f2fs-tools: fix to reset i_gc_failures offline
This patch synchronize f2fs_inode structure from kernel side, in addition, it adds to check .i_gc_failures and do resetting in fsck. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
fae19d8200
commit
91bb7b21f7
@ -445,7 +445,10 @@ static void init_inode_block(struct f2fs_sb_info *sbi,
|
||||
node_blk->i.i_ctime_nsec = 0;
|
||||
node_blk->i.i_mtime_nsec = 0;
|
||||
node_blk->i.i_generation = 0;
|
||||
node_blk->i.i_current_depth = cpu_to_le32(1);
|
||||
if (de->file_type == F2FS_FT_DIR)
|
||||
node_blk->i.i_current_depth = cpu_to_le32(1);
|
||||
else
|
||||
node_blk->i.i_current_depth = cpu_to_le32(0);
|
||||
node_blk->i.i_xattr_nid = 0;
|
||||
node_blk->i.i_flags = 0;
|
||||
node_blk->i.i_inline = F2FS_INLINE_XATTR;
|
||||
|
16
fsck/fsck.c
16
fsck/fsck.c
@ -662,6 +662,7 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
|
||||
unsigned char *en;
|
||||
u32 namelen;
|
||||
unsigned int idx = 0;
|
||||
unsigned short i_gc_failures;
|
||||
int need_fix = 0;
|
||||
int ret;
|
||||
|
||||
@ -939,6 +940,21 @@ skip_blkcnt_fix:
|
||||
}
|
||||
}
|
||||
|
||||
i_gc_failures = le16_to_cpu(node_blk->i.i_gc_failures);
|
||||
if (ftype == F2FS_FT_REG_FILE && i_gc_failures) {
|
||||
|
||||
DBG(1, "Regular Inode: 0x%x [%s] depth: %d\n\n",
|
||||
le32_to_cpu(node_blk->footer.ino), en,
|
||||
i_gc_failures);
|
||||
|
||||
if (c.fix_on) {
|
||||
node_blk->i.i_gc_failures = cpu_to_le16(0);
|
||||
need_fix = 1;
|
||||
FIX_MSG("Regular: 0x%x reset i_gc_failures from 0x%x to 0x00",
|
||||
nid, i_gc_failures);
|
||||
}
|
||||
}
|
||||
|
||||
free(en);
|
||||
|
||||
if (ftype == F2FS_FT_SYMLINK && i_blocks && i_size == 0) {
|
||||
|
@ -785,7 +785,13 @@ struct f2fs_inode {
|
||||
__le32 i_ctime_nsec; /* change time in nano scale */
|
||||
__le32 i_mtime_nsec; /* modification time in nano scale */
|
||||
__le32 i_generation; /* file version (for NFS) */
|
||||
__le32 i_current_depth; /* only for directory depth */
|
||||
union {
|
||||
__le32 i_current_depth; /* only for directory depth */
|
||||
__le16 i_gc_failures; /*
|
||||
* # of gc failures on pinned file.
|
||||
* only for regular files.
|
||||
*/
|
||||
};
|
||||
__le32 i_xattr_nid; /* nid to save xattr */
|
||||
__le32 i_flags; /* file attributes */
|
||||
__le32 i_pino; /* parent inode number */
|
||||
|
@ -1251,7 +1251,7 @@ static int f2fs_write_qf_inode(int qtype)
|
||||
raw_node->i.i_generation = 0;
|
||||
raw_node->i.i_xattr_nid = 0;
|
||||
raw_node->i.i_flags = FS_IMMUTABLE_FL;
|
||||
raw_node->i.i_current_depth = cpu_to_le32(1);
|
||||
raw_node->i.i_current_depth = cpu_to_le32(0);
|
||||
raw_node->i.i_dir_level = DEF_DIR_LEVEL;
|
||||
|
||||
if (c.feature & cpu_to_le32(F2FS_FEATURE_EXTRA_ATTR)) {
|
||||
|
Loading…
Reference in New Issue
Block a user