Skip to contentSkip to conversation

f2fs: don't need to update inode checksum for recovery

PATCH In review Jaegeuk Kim 2 participants 4 messages Sep 1, 2017 – Sep 4, 2017

Subsystems (2)
lore
Share & tools
lore

Jaegeuk Kim

author maintainer
#0 lore raw

PATCH 1/2 f2fs: don't need to update inode checksum for recovery

This patch fixes "f2fs: support inode checksum".
The recovered inode page will be rewritten with valid checksum.

---
 fs/f2fs/node.c | 2 --
 1 file changed, 2 deletions(-)
fs/f2fs/node.c +0 -2
index 2654c9166fba..388a00262a5f 100644
@@ -2287,8 +2287,6 @@ int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 			F2FS_FITS_IN_INODE(src, le16_to_cpu(src->i_extra_isize),
 								i_projid))
 			dst->i_projid = src->i_projid;
-
-		f2fs_inode_chksum_set(sbi, ipage);
 	}
 
 	new_ni = old_ni;
Signature · 1 line
2.14.0.rc1.383.gd1ce394fe2-goog
author maintainer
#1 lore raw

PATCH 2/2 f2fs: don't check inode's checksum if it was dirtied or writebacked

If another thread already made the page dirtied or writebacked, we must avoid to verify checksum. If we got an error, we need to remove its uptodate as well.

---
 fs/f2fs/inode.c | 3 ++-
 fs/f2fs/node.c  | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
fs/f2fs/inode.c +2 -1
index b4c401d456e7..c33b05aec1a1 100644
@@ -153,7 +153,8 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page)
 	struct f2fs_inode *ri;
 	__u32 provided, calculated;
 
-	if (!f2fs_enable_inode_chksum(sbi, page))
+	if (!f2fs_enable_inode_chksum(sbi, page) ||
+			PageDirty(page) || PageWriteback(page))
 		return true;
 
 	ri = &F2FS_NODE(page)->i;
fs/f2fs/node.c +1 -1
index 388a00262a5f..fca87835a1da 100644
@@ -1187,9 +1187,9 @@ static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid,
 			nid, nid_of_node(page), ino_of_node(page),
 			ofs_of_node(page), cpver_of_node(page),
 			next_blkaddr_of_node(page));
-		ClearPageUptodate(page);
 		err = -EINVAL;
 out_err:
+		ClearPageUptodate(page);
 		f2fs_put_page(page, 1);
 		return ERR_PTR(err);
 	}
Signature · 1 line
2.14.0.rc1.383.gd1ce394fe2-goog
Reviewed-by on v1 2/2
#2 lore raw

Re: [f2fs-dev] [PATCH 2/2] f2fs: don't check inode's checksum if it was dirtied or writebacked

Quoted 4 lines · Jaegeuk Kim

If another thread already made the page dirtied or writebacked, we must avoid to verify checksum. If we got an error, we need to remove its uptodate as well.

Quoted 35 lines
---
 fs/f2fs/inode.c | 3 ++-
 fs/f2fs/node.c  | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
fs/f2fs/inode.c +2 -1
index b4c401d456e7..c33b05aec1a1 100644
@@ -153,7 +153,8 @@ bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page)
 	struct f2fs_inode *ri;
 	__u32 provided, calculated;
 
-	if (!f2fs_enable_inode_chksum(sbi, page))
+	if (!f2fs_enable_inode_chksum(sbi, page) ||
+			PageDirty(page) || PageWriteback(page))
 		return true;
 
 	ri = &F2FS_NODE(page)->i;
fs/f2fs/node.c +1 -1
index 388a00262a5f..fca87835a1da 100644
@@ -1187,9 +1187,9 @@ static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid,
 			nid, nid_of_node(page), ino_of_node(page),
 			ofs_of_node(page), cpver_of_node(page),
 			next_blkaddr_of_node(page));
-		ClearPageUptodate(page);
 		err = -EINVAL;
 out_err:
+		ClearPageUptodate(page);
 		f2fs_put_page(page, 1);
 		return ERR_PTR(err);
 	}
Reviewed-by on v1 1/2
#3 lore raw
In reply to Jaegeuk Kim
Quoted 4 lines · Jaegeuk Kim

This patch fixes "f2fs: support inode checksum".
The recovered inode page will be rewritten with valid checksum.

Quoted 18 lines
---
 fs/f2fs/node.c | 2 --
 1 file changed, 2 deletions(-)
fs/f2fs/node.c +0 -2
index 2654c9166fba..388a00262a5f 100644
@@ -2287,8 +2287,6 @@ int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 			F2FS_FITS_IN_INODE(src, le16_to_cpu(src->i_extra_isize),
 								i_projid))
 			dst->i_projid = src->i_projid;
-
-		f2fs_inode_chksum_set(sbi, ipage);
 	}
 
 	new_ni = old_ni;