mirror of
https://gitee.com/openharmony/third_party_f2fs-tools
synced 2024-11-26 19:51:32 +00:00
fsck.f2fs: fix to recover out-of-border inline size
It tries to let fsck be noticed wrong inline size, and do the fix. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
dd9c372646
commit
db84e73777
@ -771,6 +771,8 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
|
||||
ofs = get_extra_isize(node_blk);
|
||||
|
||||
if ((node_blk->i.i_inline & F2FS_INLINE_DATA)) {
|
||||
unsigned int inline_size = MAX_INLINE_DATA(node_blk);
|
||||
|
||||
if (le32_to_cpu(node_blk->i.i_addr[ofs]) != 0) {
|
||||
/* should fix this bug all the time */
|
||||
FIX_MSG("inline_data has wrong 0'th block = %x",
|
||||
@ -779,6 +781,12 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
|
||||
node_blk->i.i_blocks = cpu_to_le64(*blk_cnt);
|
||||
need_fix = 1;
|
||||
}
|
||||
if (i_size > inline_size) {
|
||||
node_blk->i.i_size = cpu_to_le64(inline_size);
|
||||
FIX_MSG("inline_data has wrong i_size %lu",
|
||||
(unsigned long)i_size);
|
||||
need_fix = 1;
|
||||
}
|
||||
if (!(node_blk->i.i_inline & F2FS_DATA_EXIST)) {
|
||||
char buf[MAX_INLINE_DATA(node_blk)];
|
||||
memset(buf, 0, MAX_INLINE_DATA(node_blk));
|
||||
|
Loading…
Reference in New Issue
Block a user