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

Top Page
Attachments:
Message as email
+ (text/plain)
+ (text/html)
Delete this message
Reply to this message
Author: 김원일
Date:  
To: Charles Manning
CC: yaffs
Old-Topics: Re: [Yaffs] Error compiling on yaffs_fs.c
Subject: [Yaffs] [Yaffs2] Error yaffs_readdir on yaffs_fs.c
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++;
}
}