fsck.f2fs: fix to do sanity check with extra_attr feature
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
@@ -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
Hi, Chao,
Quoted 30 lines · Chao Yu
From: Chao Yu <[email protected]>
This patch tries to fix incorrect
extra_attrbit ori_extra_isizevalue in fsck.Signed-off-by Chao Yu <[email protected]>---
v2:
- fix to replaceF2FS_INLINE_DATAwithF2FS_EXTRA_ATTR.fsck/fsck.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)fsck/fsck.c +2
-1@@ -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
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_attrbit ori_extra_isizevalue in fsck.Signed-off-by Chao Yu <[email protected]>---
v2:
- fix to replaceF2FS_INLINE_DATAwithF2FS_EXTRA_ATTR.fsck/fsck.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)fsck/fsck.c +1
-1@@ -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