On 2017/10/31 16:57, Sheng Yong wrote:
> Hi, Chao
> 
> On 2017/10/31 15:20, Chao Yu wrote:
>> On 2017/10/31 9:38, Sheng Yong wrote:
>>> Fixing corrupted data depends on c.fix_on. If it's not set, we should not
>>> force fixing corrupted data.  So if nat entries are found invalid when
>>> building nat_area_bitmap, we should just set c.bug_on, and fix it later.
>>
>> It looks comments and code change doesn't match?
> In build_nat_area_bitmap(), if node/meta inode is invalid, the node block is
> corrected and written back directly. The "write" should depend on c.fix_on.
> So I think we should not fix the node block in build_nat_area_bitmap().

Oh, I got it, sorry for misunderstanding. ;)

Reviewed-by: Chao Yu <yuch...@huawei.com>

> 
>> do you mean
>>
>> @@ -2031,7 +2032,6 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi)
>>                               */
>>                              ASSERT_MSG("Invalid nat entry[0]: "
>>                                      "blk_addr[0x%x]\n", ni.blk_addr);
>> -                            c.fix_on = 1;
>>                              fsck->chk.valid_nat_entry_cnt--;
>>                      }
>>
>> Thanks,
>>
>>>
>>> Signed-off-by: Sheng Yong <shengyo...@huawei.com>
>>> ---
>>>   fsck/mount.c | 21 ++++++++++++++-------
>>>   1 file changed, 14 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/fsck/mount.c b/fsck/mount.c
>>> index faa9bc8..2d51678 100644
>>> --- a/fsck/mount.c
>>> +++ b/fsck/mount.c
>>> @@ -1877,9 +1877,15 @@ void nullify_nat_entry(struct f2fs_sb_info *sbi, u32 
>>> nid)
>>>     ret = dev_read_block(nat_block, block_addr);
>>>     ASSERT(ret >= 0);
>>>   
>>> -   memset(&nat_block->entries[entry_off], 0,
>>> +   if (nid == F2FS_NODE_INO(sbi) || nid == F2FS_META_INO(sbi)) {
>>> +           FIX_MSG("nid [0x%x] block_addr= 0x%x -> 0x1", nid,
>>> +                   le32_to_cpu(nat_block->entries[entry_off].block_addr));
>>> +           nat_block->entries[entry_off].block_addr = cpu_to_le32(0x1);
>>> +   } else {
>>> +           memset(&nat_block->entries[entry_off], 0,
>>>                                     sizeof(struct f2fs_nat_entry));
>>> -   FIX_MSG("Remove nid [0x%x] in NAT\n", nid);
>>> +           FIX_MSG("Remove nid [0x%x] in NAT\n", nid);
>>> +   }
>>>   
>>>     ret = dev_write_block(nat_block, block_addr);
>>>     ASSERT(ret >= 0);
>>> @@ -2001,13 +2007,14 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi)
>>>   
>>>                     if ((nid + i) == F2FS_NODE_INO(sbi) ||
>>>                                     (nid + i) == F2FS_META_INO(sbi)) {
>>> -                           /* block_addr of node/meta inode should be 0x1 
>>> */
>>> +                           /*
>>> +                            * block_addr of node/meta inode should be 0x1.
>>> +                            * Set this bit, and fsck_verify will fix it.
>>> +                            */
>>>                             if 
>>> (le32_to_cpu(nat_block->entries[i].block_addr) != 0x1) {
>>> -                                   FIX_MSG("ino: 0x%x node/meta inode, 
>>> block_addr= 0x%x -> 0x1",
>>> +                                   ASSERT_MSG("\tError: ino[0x%x] 
>>> block_addr[0x%x] is invalid\n",
>>>                                                     nid + i, 
>>> le32_to_cpu(nat_block->entries[i].block_addr));
>>> -                                   nat_block->entries[i].block_addr = 
>>> cpu_to_le32(0x1);
>>> -                                   ret = dev_write_block(nat_block, 
>>> block_addr);
> dev_write_block should depend on (c.fix_on == 1). ^^^^^^^^^^^
> The corruption will be fixed in nullify_nat_entry().
> 
> thanks,
> Sheng
>>> -                                   ASSERT(ret >= 0);
>>> +                                   f2fs_set_bit(nid + i, 
>>> fsck->nat_area_bitmap);
>>>                             }
>>>                             continue;
>>>                     }
>>>
>>
>>
>> .
>>
> 
> 
> .
> 


------------------------------------------------------------------------------
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
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to