Re: [Yaffs] [Yaffs2] Error yaffs_readdir on yaffs_fs.c

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Charles Manning
Date:  
To: yaffs
Subject: Re: [Yaffs] [Yaffs2] Error yaffs_readdir on yaffs_fs.c
On Tuesday 12 January 2010 14:42:09 김원일 wrote:
> hello.... charles
>
> I do display errorr point (red color).
>
> In yaffs_fs.c and yaffs_guts.c, please... confirm to file.
>
> I know...yaffs_GetObjectInode() function is getting i-node.
>
> I-node had "NULL" value.
>
> this time, yaffs filesystem display error message.
>
> I think to lost I-node. why do lost I-node?
> what is reason? you will know me.
>
> thank you for you...
>
> as soon as.... I wish to send reason via e-mail to me.
>
>
>
>
>
>
>
>
> ----------------------------------------------------
> Kernel error Message
> ----------------------------------------------------
>
> [root@hello /mnt/mtd3/up_wait_]# ls
> Unable to handle kernel NULL pointer dereference at virtual address
> 00000030 pgd = c3e8c000
> [00000030] *pgd=33e3f031, *pte=00000000, *ppte=00000000
> Internal error: Oops: 17 [#1]
> Modules linked in:
> CPU: 0
> PC is at yaffs_GetObjectInode+0x10/0x18
> LR is at yaffs_GetObjectInode+0x10/0x18
> pc : [<c011c338>]    lr : [<c011c338>]    Not tainted
> sp : c3d77df4  ip : c3d77df4  fp : c3d77e00
> r10: 00000002  r9 : 00000002  r8 : c04924d4
> r7 : 00000001  r6 : c3e3d0d0  r5 : c04924b4  r4 : 0000002f
> r3 : 00000004  r2 : c3d77e24  r1 : 000014b2  r0 : 00000000
> Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  Segment user
> Control: 717F  Table: 33E8C000  DAC: 00000015
> Process ls (pid: 934, stack limit = 0xc3d76194)
> Stack: (0xc3d77df4 to 0xc3d78000)
> 7de0:                                              c3d77f4c c3d77e04
> c01154bc 7e00: c011c338 00000000 00000001 00000004 c05651a4 c0f87700
> c0e4b000 c0096db8 7e20: c3d77f74 34303255 36342e30 30333030 34312e30
> 35303736 2e343432 39303032 7e40: 30323031 37323731 312e3632 30303634
> 00303033 00000000 00000000 00000000 7e60: 00000000 00000000 00000000
> 00000000 00000000 00000000 00000000 00000000 7e80: 00000000 00000000
> 00000000 00000000 00000000 00000000 00000000 00000000 7ea0: 00000000
> 00000000 00000000 00000000 00000000 00000000 00000000 00000000 7ec0:
> 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 7ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 7f00: 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 7f20: 00000000 c0f876e0 c3e3d140 c3e3d0d0 fffffffe
> c0096db8 c3d76000 401babcc 7f40: c3d77f70 c3d77f50 c0096a68 c01152d4
> 0008e110 00000000 00001000 fffffff7 7f60: c0f876e0 c3d77fa4 c3d77f74
> c0096f98 c00969c8 0008e140 0008e128 00000fd0 7f80: ffffffea 00001000
> 000002b4 00000000 000000d9 c00340a4 00000000 c3d77fa8 7fa0: c0033f20
> c0096f3c 00001000 000002b4 00000003 0008e110 00001000 00000278 7fc0:
> 00001000 000002b4 00000000 000028cc 00000000 0008e0e0 401babcc beee1cf8
> 7fe0: 0008e110 beee1ca0 401bb0d0 4013473c 20000010 00000003 00000200
> 00000440 Backtrace:
> [<c011c328>] (yaffs_GetObjectInode+0x0/0x18) from [<c01154bc>]
> (yaffs_readdir+0x1f8/0x2b4) [<c01152c4>] (yaffs_readdir+0x0/0x2b4) from
> [<c0096a68>] (vfs_readdir+0xb0/0xd0) [<c00969b8>] (vfs_readdir+0x0/0xd0)
> from [<c0096f98>] (sys_getdents64+0x6c/0xc4) r8 = C0F876E0  r7 = FFFFFFF7 
> r6 = 00001000  r5 = 00000000
>  r4 = 0008E110
> [<c0096f2c>] (sys_getdents64+0x0/0xc4) from [<c0033f20>]
> (ret_fast_syscall+0x0/0x2c) r8 = C00340A4  r7 = 000000D9  r6 = 00000000  r5
> = 000002B4
>  r4 = 00001000
> Code: e1a0c00d e92dd800 e24cb004 ebffed57 (e5900030)
>  Segmentation fault

>
> -----------------------------------------------------
>
>
>
>
> # source contens
>
> static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir)
> in yaffs_fs.c
>
> list_for_each(i, &obj->variant.directoryVariant.children) {
>   curoffs++;
>   if (curoffs >= offset) {
>    l = list_entry(i, yaffs_Object, siblings);

>
>    yaffs_GetObjectName(l, name,
>          YAFFS_MAX_NAME_LENGTH + 1);
>    T(YAFFS_TRACE_OS,
>      (KERN_DEBUG "yaffs_readdir: %s inode %d\n", name,
>       yaffs_GetObjectInode(l)));

>
>    if (filldir(dirent,
>         name,
>         strlen(name),
>         offset,
>         yaffs_GetObjectInode(l),
>         yaffs_GetObjectType(l))
>        < 0) {
>     goto up_and_out;
>    }

>
>    offset++;
>    f->f_pos++;
>   }
>  }



This code has been changed. Please try with the latest.
If you still get the problem then please provide a test case for this.

-- CHarles