[Yaffs] Reproducible Oops after umount (linux 2.4.18_mvl30, …

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: olivier.eribon@free.fr
Date:  
To: yaffs
Subject: [Yaffs] Reproducible Oops after umount (linux 2.4.18_mvl30, mtd january 2005, yaffs2)
All,

I am using yaffs during 3 years without any major problem. In order to support
2k nand flash I try to integrate in the linux kernel 2.4.18 (montavista 3.0
with preempt patch) the yaffs2 support.

In this case I use the latest mtd support for 2.4 kernel and integrate it in the
2.4.18_mvl30 and I use yaffs2 (six months older).

With my embedded cpu board, it is not possible to switch for a linux 2.6 today
because we have a lot of modifications.

Could you help me by giving some ways or information that could be necessary to
check.

In fact today, I could erase the 2k nand flash, mounted it and writing on it.
But just few time after the umount, the next inode access (like logrotate) a
Oops arrived (each time).

/mnt/automount is only a mount point for the nand flash partition

[root@base-8000-0 automount]# df
Filesystem            1k-blocks      Used Available Use% Mounted on
/dev/root             130665864  68352232  61006974  53% /
/dev/ram0                  7931      5042      2480  68% /mnt/var/log
/dev/ram1                  7931        22      7500   1% /var/spool
/dev/ram2                  7931        22      7500   1% /tmp
/dev/mtdblock2           112640     59796     52844  54% /mnt/automount
ensun14:/home/mts8000 130665888  68352256  61006976  53% /mnt/home
[root@base-8000-0 automount]# cd
[root@base-8000-0 root]# strace umount /mnt/automount/
execve("/bin/umount", ["umount", "/mnt/automount/"], [/* 14 varsnand_sync:
called
 */]) = 0
brk(0mtdblock_release
nand_sync: called
ok
)                                  = 0x1001a57c
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x30018000
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(0x3, 0x7ffff018)                = 0
mmap(NULL, 14606, PROT_READ, MAP_PRIVATE, 3, 0) = 0x30019000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\1\344"..., 1024) =
1024
fstat64(0x3, 0x7ffff070)                = 0
mmap(0xfeb4000, 1294044, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfeb4000
mprotect(0xffd5000, 110300, PROT_NONE)  = 0
mmap(0xffe4000, 28672, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
0x120000) = 0xffe4000
mmap(0xffeb000, 20188, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffeb000
close(3)                                = 0
mprotect(0xfeb4000, 1183744, PROT_READ|PROT_WRITE) = 0
mprotect(0xfeb4000, 1183744, PROT_READ|PROT_EXEC) = 0
munmap(0x30019000, 14606)               = 0
brk(0)                                  = 0x1001a57c
brk(0x1001a5a4)                         = 0x1001a5a4
brk(0x1001b000)                         = 0x1001b000
getuid()                                = 0
geteuid()                               = 0
brk(0x1001d000)                         = 0x1001d000
readlink("/mnt", 0x7fffec78, 4096)      = -1 EINVAL (Invalid argument)
readlink("/mnt/automount", 0x7fffec78, 4096) = -1 EINVAL (Invalid argument)
open("/etc/mtab", O_RDONLY|O_LARGEFILE) = 3
fstat64(0x3, 0x7ffffa38)                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x30019000
read(3, "/dev/root / nfs rw,v2,rsize=4096"..., 4096) = 370
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x30019000, 4096)                = 0
oldumount("/mnt/automount")             = 0
lstat64(0x10008338, 0x7ffffba8)         = 0
exit(0)                                 = ?
[root@base-8000-0 root]#
Oops: kernel access of bad area, sig: 11
NIP: C0010524 XER: 00000000 LR: C00104EC SP: C7ABDE10 REGS: c7abdd50 TRAP: 0800 
  Tainted: PF
MSR: 00001030 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 11
DEAR: 62F612D1, ESR: 00000000
TASK = c7abc000[604] 'logrotate' Last syscall: 1
last math 00000000 last altivec 00000000
PLB0: bear= 0x00000000 acr=   0x00000000 besr=  0x00000000
PLB0 to OPB: bear= 0x00000000 besr0= 0x00000000 besr1= 0x00000000


GPR00: 00000002 C7ABDE10 C7ABC000 00000001 00000000 00000001 00004001 C029EBDB
GPR08: 00000000 62F612D1 00000031 2F646576 C0310000 1001E658 00000000 00000000
GPR16: 00000000 00000000 00000000 00000000 00009032 07ABDF30 00000000 C0002D38
GPR24: C0002A20 0FFC2B14 00000000 00000001 00000001 C7FF6AA0 C6E93000 C7ABDE10
Call backtrace:
C02E9860 runqueue_lock
C00533D4 pipe_release
C0053494 pipe_read_release
C0045308 fput
C004296C filp_close
C001AA0C close_files
C001930C put_files_struct
C0019CD8 do_exit
C0019F34 complete_and_exit
C0002A7C ret_from_syscall_1
note: logrotate[604] exited with preempt_count 2

Do you have some explanation, witch struct had been change and could not be
compatible with linux kernel or mtd version ?

Best regards and thanks for your help and your work

Olivier