Hi, Sheng.

A  bit  better  but still fail. At least it does not corrupt fs and it
mounts.

Info: Segments per section = 1
Info: Sections per zone = 1
Info: sector size = 512
Info: total sectors = 204800 (100 MB)
Info: MKFS version
  "Linux version 4.4.30 (vasya@nowhere) (gcc version 5.4.0 (LEDE GCC 5.4.0 
r2084) ) #0 PREEMPT Thu Nov 3 07:34:38 2016"
Info: FSCK version
  from "Linux version 4.4.30 (vasya@nowhere) (gcc version 5.4.0 (LEDE GCC 5.4.0 
r2084) ) #0 PREEMPT Thu Nov 3 07:34:38 2016"
    to "Linux version 4.4.30 (vasya@nowhere) (gcc version 5.4.0 (LEDE GCC 5.4.0 
r2084) ) #0 PREEMPT Thu Nov 3 07:34:38 2016"
Info: superblock features = 0 : 
Info: superblock encrypt level = 0, salt = 00000000000000000000000000000000
Info: total FS sectors = 204800 (100 MB)
Info: CKPT version = 3
Info: checkpoint state = 5 :  compacted_summary unmount

[FSCK] Unreachable nat entries                        [Ok..] [0x0]
[FSCK] SIT valid block bitmap checking                [Ok..]
[FSCK] Hard link checking for regular file            [Ok..] [0x0]
[FSCK] valid_block_count matching with CP             [Ok..] [0x2]
[FSCK] valid_node_count matcing with CP (de lookup)   [Ok..] [0x1]
[FSCK] valid_node_count matcing with CP (nat lookup)  [Ok..] [0x1]
[FSCK] valid_inode_count matched with CP              [Ok..] [0x1]
[FSCK] free segment_count matched with CP             [Fail] [0x27]
[FSCK] next block offset is free                      [Ok..]
[FSCK] fixing SIT types
[FSCK] other corrupted bugs                           [Fail]

.......  at  this  point  according  to  strace  fsck  does  readv from
descriptor 0 (stdin).  Must interrupt it with ctrl+c



> Hi,

> On 11/25/2016 6:30 AM, k...@vodka.home.kg wrote:
>> Hi !
>> 
>> I'm using f2fs on router Dlink dir-825 with openwrt/LEDE firmware.
>> Its mips32 rel 2 big endian cpu.
>> 
>> mkfs.f2fs - works
>> mount - works
>> fsck.f2fs - corrupts filesystem
>> 
>> # i'm  trying  to fsck valid empty mountable f2fs partition i have just 
>> mkfs'ed
>> fsck.f2fs /dev/sda2
>> Info: Segments per section = 1
>> Info: Sections per zone = 1
>> Info: sector size = 512
>> Info: total sectors = 6508544 (3178 MB)
>> Info: MKFS version
>>   "Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 
>> 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 
>> 2016"
>> Info: FSCK version
>>   from "Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 
>> 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 
>> 2016"
>>     to "Linux version 4.4.30 (vasya@nowhere) (gcc version 5.4.0 (LEDE GCC 
>> 5.4.0 r2084) ) #0 PREEMPT Thu Nov 3 07:34:38 2016"
>> Info: superblock features = 0 : 
>> Info: superblock encrypt level = 0, salt = 00000000000000000000000000000000
>> Info: total FS sectors = 6508544 (3178 MB)
>> Info: CKPT version = 1
>> Info: checkpoint state = 5 :  compacted_summary unmount
>> [ASSERT] (sanity_check_nid: 356)  --> nid is not valid. [0x3]
> It seems that sanity_check_nid does not switch little endian value to big 
> endian.
> I'm not sure if it is caused by this and if there are any other places have 
> this
> endian switch issue, could you please test this.

> thanks,
> Sheng

> ======

> diff --git a/fsck/f2fs.h b/fsck/f2fs.h
> index 39ff161..9dc832c 100644
> --- a/fsck/f2fs.h
> +++ b/fsck/f2fs.h
> @@ -370,7 +370,7 @@ static inline block_t sum_blk_addr(struct
> f2fs_sb_info *sbi, int base, int type)
>  static inline bool IS_VALID_NID(struct f2fs_sb_info *sbi, u32 nid)
>  {
>         return (nid <= (NAT_ENTRY_PER_BLOCK *
> -                       F2FS_RAW_SUPER(sbi)->segment_count_nat
> +                      
> le32_to_cpu(F2FS_RAW_SUPER(sbi)->segment_count_nat)
>                         << (sbi->log_blocks_per_seg - 1)));
>  }

> @@ -378,7 +378,7 @@ static inline bool IS_VALID_BLK_ADDR(struct f2fs_sb_info 
> *sbi, u32 addr)
>  {
>         int i;

-       if (addr >>= F2FS_RAW_SUPER(sbi)->block_count ||
+       if (addr >>= le64_to_cpu(F2FS_RAW_SUPER(sbi)->block_count) ||
>                                 addr < SM_I(sbi)->main_blkaddr) {
>                 DBG(1, "block addr [0x%x]\n", addr);
>                 return 0;
>> 
>> NID[0x3] is unreachable
>> [FSCK] Unreachable nat entries                        [Fail] [0x1]
>> [FSCK] SIT valid block bitmap checking                [Fail]
>> [FSCK] Hard link checking for regular file            [Ok..] [0x0]
>> [FSCK] valid_block_count matching with CP             [Fail] [0x0]
>> [FSCK] valid_node_count matcing with CP (de lookup)   [Fail] [0x0]
>> [FSCK] valid_node_count matcing with CP (nat lookup)  [Ok..] [0x1]
>> [FSCK] valid_inode_count matched with CP              [Fail] [0x0]
>> [FSCK] free segment_count matched with CP             [Fail] [0x621]
>> [FSCK] next block offset is free                      [Ok..]
>> [FSCK] fixing SIT types
>> [FSCK] other corrupted bugs                           [Fail]
>> [FIX] (nullify_nat_entry:1688)  --> Remove nid [0x3] in nat journal
>> 
>> After failed mount attempt :
>> 
>> dmesg
>> F2FS-fs (sda2): Failed to read root inode
>> 
>> On x86 and ARM everything is ok
>> 
>> f2fs-tools 1.7.0
>> kernel 4.4.30
>> 
>> 
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Linux-f2fs-devel mailing list
>> Linux-f2fs-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
>> 
>> .
>> 



------------------------------------------------------------------------------
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to