summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/inode.c
diff options
context:
space:
mode:
authorChao Yu2018-06-05 11:44:11 +0200
committerJaegeuk Kim2018-07-27 11:03:59 +0200
commite1da7872f6eda977bd812346bf588c35e4495a1e (patch)
tree1aef775092817c292fb379aa7ece851473589c07 /fs/f2fs/inode.c
parentf2fs: use timespec64 for inode timestamps (diff)
downloadkernel-qcow2-linux-e1da7872f6eda977bd812346bf588c35e4495a1e.tar.gz
kernel-qcow2-linux-e1da7872f6eda977bd812346bf588c35e4495a1e.tar.xz
kernel-qcow2-linux-e1da7872f6eda977bd812346bf588c35e4495a1e.zip
f2fs: introduce and spread verify_blkaddr
This patch introduces verify_blkaddr to check meta/data block address with valid range to detect bug earlier. In addition, once we encounter an invalid blkaddr, notice user to run fsck to fix, and let the kernel panic. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/inode.c')
-rw-r--r--fs/f2fs/inode.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 2076225787d1..e9cfcdbbe24c 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -68,11 +68,12 @@ static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri)
}
}
-static bool __written_first_block(struct f2fs_inode *ri)
+static bool __written_first_block(struct f2fs_sb_info *sbi,
+ struct f2fs_inode *ri)
{
block_t addr = le32_to_cpu(ri->i_addr[offset_in_addr(ri)]);
- if (is_valid_blkaddr(addr))
+ if (is_valid_data_blkaddr(sbi, addr))
return true;
return false;
}
@@ -282,7 +283,7 @@ static int do_read_inode(struct inode *inode)
/* get rdev by using inline_info */
__get_inode_rdev(inode, ri);
- if (__written_first_block(ri))
+ if (__written_first_block(sbi, ri))
set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN);
if (!f2fs_need_inode_block_update(sbi, inode->i_ino))