On Thursday 22 July 2010 06:06:10 Peter Barada wrote: > Charles, > > I've pulled a current snapshot from the git tree (ID > 388ad45f27ef3288d2f1240a4e94d5849cf8201b) and when I tried to compile it > into a 2.6.32 kernel for my OMAP board, compilation fails with: > > fs/yaffs2/yaffs_linux_allocator.c: In function > 'yaffs_InitialiseRawTnodesAndObjects': > fs/yaffs2/yaffs_linux_allocator.c:106: error: implicit declaration of > function 'yaffs_DeviceToContext' > fs/yaffs2/yaffs_linux_allocator.c:106: error: invalid type argument of > '->' (have 'int') > > > Grepping through the yaffs2 code for "yaffs_DeviceToContext", there's no > declaration for it. Looking around for other uses of mount_id, I tried > replacing yaffs_DeviceToContext with yaffs_DeviceToLC, and the world > builds w/o error, but when I try to mount my NAND device (Micron 2KB > block), the kernel oopses quite hard: > > > OMAP-35x# cat /proc/mtd > dev: size erasesize name > mtd0: 00800000 00020000 "NOR fs #1" > mtd1: 00020000 00020000 "NoLo-NAND" > mtd2: 00220000 00020000 "Lboot-NAND" > mtd3: 00c80000 00020000 "NAND fs #1" > mtd4: 0f100000 00020000 "NAND fs #2" > mtd5: 00040000 00020000 "u-boot Env-NAND" > OMAP-35x# mkdir /mnt/yaffs > OMAP-35x# mount -t yaffs /dev/mtdblock4 /mnt/yaffs > yaffs: dev is 32505860 name is "mtdblock4" > yaffs: passed flags "" > yaffs: Attempting MTD mount of 31.4,"mtdblock4" > yaffs: auto selecting yaffs2 > slab error in kmem_cache_destroy(): cache `yaffs_o_1': Can't free all > objects [] (unwind_backtrace+0x0/0xdc) from [] > (kmem_cache_destroy+0x88/0xf0) [] (kmem_cache_destroy+0x88/0xf0) > from [] (yaffs_DeinitialiseRawTnodesAndObjects+0x70/0xdc) > [] (yaffs_DeinitialiseRawTnodesAndObjects+0x70/0xdc) from > [] (yaffs_DeinitialiseTnodesAndObjects+0xc/0x1c) [] > (yaffs_DeinitialiseTnodesAndObjects+0xc/0x1c) from [] > (yaffs_GutsInitialise+0x584/0x85c) [] > (yaffs_GutsInitialise+0x584/0x85c) from [] > (yaffs_internal_read_super+0x8e8/0xb68) [] > (yaffs_internal_read_super+0x8e8/0xb68) from [] > (yaffs_internal_read_super_mtd+0x1c/0x2c) [] > (yaffs_internal_read_super_mtd+0x1c/0x2c) from [] > (get_sb_bdev+0x114/0x16c) [] (get_sb_bdev+0x114/0x16c) from > [] (yaffs_read_super+0x18/0x20) [] > (yaffs_read_super+0x18/0x20) from [] (vfs_kern_mount+0x4c/0xd0) > [] (vfs_kern_mount+0x4c/0xd0) from [] > (do_kern_mount+0x34/0xd8) [] (do_kern_mount+0x34/0xd8) from > [] (do_mount+0x5ec/0x64c) [] (do_mount+0x5ec/0x64c) > from [] (sys_mount+0x84/0xc4) [] (sys_mount+0x84/0xc4) > from [] (ret_fast_syscall+0x0/0x2c) kmem_cache_create: duplicate > cache yaffs_o_1 > [] (unwind_backtrace+0x0/0xdc) from [] > (kmem_cache_create+0x148/0x45c) [] > (kmem_cache_create+0x148/0x45c) from [] > (yaffs_InitialiseRawTnodesAndObjects+0x130/0x1bc) [] > (yaffs_InitialiseRawTnodesAndObjects+0x130/0x1bc) from [] > (yaffs_InitialiseTnodesAndObjects+0x18/0x4c) [] > (yaffs_InitialiseTnodesAndObjects+0x18/0x4c) from [] > (yaffs_GutsInitialise+0x5bc/0x85c) [] > (yaffs_GutsInitialise+0x5bc/0x85c) from [] > (yaffs_internal_read_super+0x8e8/0xb68) [] > (yaffs_internal_read_super+0x8e8/0xb68) from [] > (yaffs_internal_read_super_mtd+0x1c/0x2c) [] > (yaffs_internal_read_super_mtd+0x1c/0x2c) from [] > (get_sb_bdev+0x114/0x16c) [] (get_sb_bdev+0x114/0x16c) from > [] (yaffs_read_super+0x18/0x20) [] > (yaffs_read_super+0x18/0x20) from [] (vfs_kern_mount+0x4c/0xd0) > [] (vfs_kern_mount+0x4c/0xd0) from [] > (do_kern_mount+0x34/0xd8) [] (do_kern_mount+0x34/0xd8) from > [] (do_mount+0x5ec/0x64c) [] (do_mount+0x5ec/0x64c) > from [] (sys_mount+0x84/0xc4) [] (sys_mount+0x84/0xc4) > from [] (ret_fast_syscall+0x0/0x2c) yaffs cache creation failed > ==>> yaffs bug: fs/yaffs2/yaffs_linux_allocator.c 160 > > > At this point I have to ask: > > 1) What should I use in yaffs_linux_allocator to replace > DeviceToLinuxContext()? > > 2) If I guessed correctly by using DeviceToLC, then why does the kernel > oops? > > 3) Have you built/tested the current git head on a Linux system? > > Thanks in advance! My Bad. The yaffs_linux_allocator.c did not work out as a useful allocation policy and I've gone back to yaffs_allocator.c I unfortunately did not change the in-kernel makefile. Fixed now in git. -- Charles