Skip to contentSkip to conversation

fsck.f2fs: fix to do sanity check with extra_attr feature

PATCH In review Chao Yu 3 participants 3 messages Jul 9, 2018 – Jul 10, 2018

lore
Share & tools
lore

Chao Yu

author
#0 lore raw

PATCH v2 1/1 fsck.f2fs: fix to do sanity check with extra_attr feature

From: Chao Yu <[email protected]>

This patch tries to fix incorrect extra_attr bit or i_extra_isize value in fsck.

---
v2:
- fix to replace F2FS_INLINE_DATA with F2FS_EXTRA_ATTR.

 fsck/fsck.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
fsck/fsck.c +17 -1
index 05a6301..36d1977 100644
@@ -655,7 +655,7 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
 	u32 i_links = le32_to_cpu(node_blk->i.i_links);
 	u64 i_size = le64_to_cpu(node_blk->i.i_size);
 	u64 i_blocks = le64_to_cpu(node_blk->i.i_blocks);
-	int ofs = get_extra_isize(node_blk);
+	int ofs;
 	unsigned char *en;
 	int namelen;
 	unsigned int idx = 0;
@@ -719,6 +719,22 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
 			ftype == F2FS_FT_FIFO || ftype == F2FS_FT_SOCK)
 		goto check;
 
+	if (f2fs_has_extra_isize(&node_blk->i)) {
+		if (c.feature & cpu_to_le32(F2FS_FEATURE_EXTRA_ATTR)) {
+			if (node_blk->i.i_extra_isize >
+				cpu_to_le16(F2FS_TOTAL_EXTRA_ATTR_SIZE)) {
+				node_blk->i.i_extra_isize =
+					cpu_to_le16(F2FS_TOTAL_EXTRA_ATTR_SIZE);
+				need_fix = 1;
+			}
+		} else {
+			/* we don't support tuning F2FS_FEATURE_EXTRA_ATTR now */
+			node_blk->i.i_inline |= ~F2FS_EXTRA_ATTR;
+			need_fix = 1;
+		}
+	}
+	ofs = get_extra_isize(node_blk);
+
 	if ((node_blk->i.i_inline & F2FS_INLINE_DATA)) {
 		if (le32_to_cpu(node_blk->i.i_addr[ofs]) != 0) {
 			/* should fix this bug all the time */
Signature · 6 lines
2.16.2.17.g38e79b1fd


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
#1 lore raw

Hi, Chao,

Quoted 30 lines · Chao Yu

From: Chao Yu <[email protected]>

This patch tries to fix incorrect extra_attr bit or i_extra_isize value in fsck.

---
v2:
- fix to replace F2FS_INLINE_DATA with F2FS_EXTRA_ATTR.

  fsck/fsck.c | 18 +++++++++++++++++-
  1 file changed, 17 insertions(+), 1 deletion(-)
fsck/fsck.c +2 -1
index 05a6301..36d1977 100644
@@ -655,7 +655,7 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
  	u32 i_links = le32_to_cpu(node_blk->i.i_links);
  	u64 i_size = le64_to_cpu(node_blk->i.i_size);
  	u64 i_blocks = le64_to_cpu(node_blk->i.i_blocks);
-	int ofs = get_extra_isize(node_blk);
+	int ofs;
  	unsigned char *en;
  	int namelen;
  	unsigned int idx = 0;
@@ -719,6 +719,22 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
  			ftype == F2FS_FT_FIFO || ftype == F2FS_FT_SOCK)
  		goto check;
 
+	if (f2fs_has_extra_isize(&node_blk->i)) {

fsck/fsck.c void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid, · line 732

Quoted 10 lines
fsck/fsck.c +10 -0
+		if (c.feature & cpu_to_le32(F2FS_FEATURE_EXTRA_ATTR)) {
+			if (node_blk->i.i_extra_isize >
+				cpu_to_le16(F2FS_TOTAL_EXTRA_ATTR_SIZE)) {
+				node_blk->i.i_extra_isize =
+					cpu_to_le16(F2FS_TOTAL_EXTRA_ATTR_SIZE);
+				need_fix = 1;
+			}
+		} else {
+			/* we don't support tuning F2FS_FEATURE_EXTRA_ATTR now */
+			node_blk->i.i_inline |= ~F2FS_EXTRA_ATTR;

node_blk->i.i_inline &= ~F2FS_EXTRA_ATTR;

thanks :-)
.

fsck/fsck.c void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid, · line 740

Quoted 9 lines
fsck/fsck.c +5 -0
+			need_fix = 1;
+		}
+	}
+	ofs = get_extra_isize(node_blk);
+
  	if ((node_blk->i.i_inline & F2FS_INLINE_DATA)) {
  		if (le32_to_cpu(node_blk->i.i_addr[ofs]) != 0) {
  			/* should fix this bug all the time */

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot

#2 lore raw

Hi Sheng,

Quoted 32 lines · Sheng Yong

Hi, Chao,

Quoted 29 lines · Chao Yu

From: Chao Yu <[email protected]>

This patch tries to fix incorrect extra_attr bit or i_extra_isize value in fsck.

---
v2:
- fix to replace F2FS_INLINE_DATA with F2FS_EXTRA_ATTR.

  fsck/fsck.c | 18 +++++++++++++++++-
  1 file changed, 17 insertions(+), 1 deletion(-)
fsck/fsck.c +1 -1
index 05a6301..36d1977 100644
@@ -655,7 +655,7 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
  	u32 i_links = le32_to_cpu(node_blk->i.i_links);
  	u64 i_size = le64_to_cpu(node_blk->i.i_size);
  	u64 i_blocks = le64_to_cpu(node_blk->i.i_blocks);
-	int ofs = get_extra_isize(node_blk);
+	int ofs;
  	unsigned char *en;
  	int namelen;
  	unsigned int idx = 0;
@@ -719,6 +719,22 @@ void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
  			ftype == F2FS_FT_FIFO || ftype == F2FS_FT_SOCK)
  		goto check;
 
Quoted 13 lines

fsck/fsck.c void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid, · line 732

Quoted 11 lines
fsck/fsck.c +11 -0
+	if (f2fs_has_extra_isize(&node_blk->i)) {
+		if (c.feature & cpu_to_le32(F2FS_FEATURE_EXTRA_ATTR)) {
+			if (node_blk->i.i_extra_isize >
+				cpu_to_le16(F2FS_TOTAL_EXTRA_ATTR_SIZE)) {
+				node_blk->i.i_extra_isize =
+					cpu_to_le16(F2FS_TOTAL_EXTRA_ATTR_SIZE);
+				need_fix = 1;
+			}
+		} else {
+			/* we don't support tuning F2FS_FEATURE_EXTRA_ATTR now */
+			node_blk->i.i_inline |= ~F2FS_EXTRA_ATTR;

node_blk->i.i_inline &= ~F2FS_EXTRA_ATTR;

Oh, sorry, let me fix this in v3, thanks for the review. :)

Thanks,

Quoted 15 lines

thanks :-)
.

fsck/fsck.c void fsck_chk_inode_blk(struct f2fs_sb_info *sbi, u32 nid, · line 740

Quoted 9 lines
fsck/fsck.c +5 -0
+			need_fix = 1;
+		}
+	}
+	ofs = get_extra_isize(node_blk);
+
  	if ((node_blk->i.i_inline & F2FS_INLINE_DATA)) {
  		if (le32_to_cpu(node_blk->i.i_addr[ofs]) != 0) {
  			/* should fix this bug all the time */
Quoted 9 lines

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot