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 [<c0037584>] (unwind_backtrace+0x0/0xdc) from [<c00ace10>]
> (kmem_cache_destroy+0x88/0xf0) [<c00ace10>] (kmem_cache_destroy+0x88/0xf0)
> from [<c016d694>] (yaffs_DeinitialiseRawTnodesAndObjects+0x70/0xdc)
> [<c016d694>] (yaffs_DeinitialiseRawTnodesAndObjects+0x70/0xdc) from
> [<c016544c>] (yaffs_DeinitialiseTnodesAndObjects+0xc/0x1c) [<c016544c>]
> (yaffs_DeinitialiseTnodesAndObjects+0xc/0x1c) from [<c016a26c>]
> (yaffs_GutsInitialise+0x584/0x85c) [<c016a26c>]
> (yaffs_GutsInitialise+0x584/0x85c) from [<c0163ea0>]
> (yaffs_internal_read_super+0x8e8/0xb68) [<c0163ea0>]
> (yaffs_internal_read_super+0x8e8/0xb68) from [<c0164168>]
> (yaffs_internal_read_super_mtd+0x1c/0x2c) [<c0164168>]
> (yaffs_internal_read_super_mtd+0x1c/0x2c) from [<c00b1790>]
> (get_sb_bdev+0x114/0x16c) [<c00b1790>] (get_sb_bdev+0x114/0x16c) from
> [<c01613f4>] (yaffs_read_super+0x18/0x20) [<c01613f4>]
> (yaffs_read_super+0x18/0x20) from [<c00b0810>] (vfs_kern_mount+0x4c/0xd0)
> [<c00b0810>] (vfs_kern_mount+0x4c/0xd0) from [<c00b08d8>]
> (do_kern_mount+0x34/0xd8) [<c00b08d8>] (do_kern_mount+0x34/0xd8) from
> [<c00c4fd8>] (do_mount+0x5ec/0x64c) [<c00c4fd8>] (do_mount+0x5ec/0x64c)
> from [<c00c50bc>] (sys_mount+0x84/0xc4) [<c00c50bc>] (sys_mount+0x84/0xc4)
> from [<c0031ec0>] (ret_fast_syscall+0x0/0x2c) kmem_cache_create: duplicate
> cache yaffs_o_1
> [<c0037584>] (unwind_backtrace+0x0/0xdc) from [<c00acfc0>]
> (kmem_cache_create+0x148/0x45c) [<c00acfc0>]
> (kmem_cache_create+0x148/0x45c) from [<c016d598>]
> (yaffs_InitialiseRawTnodesAndObjects+0x130/0x1bc) [<c016d598>]
> (yaffs_InitialiseRawTnodesAndObjects+0x130/0x1bc) from [<c01659ac>]
> (yaffs_InitialiseTnodesAndObjects+0x18/0x4c) [<c01659ac>]
> (yaffs_InitialiseTnodesAndObjects+0x18/0x4c) from [<c016a2a4>]
> (yaffs_GutsInitialise+0x5bc/0x85c) [<c016a2a4>]
> (yaffs_GutsInitialise+0x5bc/0x85c) from [<c0163ea0>]
> (yaffs_internal_read_super+0x8e8/0xb68) [<c0163ea0>]
> (yaffs_internal_read_super+0x8e8/0xb68) from [<c0164168>]
> (yaffs_internal_read_super_mtd+0x1c/0x2c) [<c0164168>]
> (yaffs_internal_read_super_mtd+0x1c/0x2c) from [<c00b1790>]
> (get_sb_bdev+0x114/0x16c) [<c00b1790>] (get_sb_bdev+0x114/0x16c) from
> [<c01613f4>] (yaffs_read_super+0x18/0x20) [<c01613f4>]
> (yaffs_read_super+0x18/0x20) from [<c00b0810>] (vfs_kern_mount+0x4c/0xd0)
> [<c00b0810>] (vfs_kern_mount+0x4c/0xd0) from [<c00b08d8>]
> (do_kern_mount+0x34/0xd8) [<c00b08d8>] (do_kern_mount+0x34/0xd8) from
> [<c00c4fd8>] (do_mount+0x5ec/0x64c) [<c00c4fd8>] (do_mount+0x5ec/0x64c)
> from [<c00c50bc>] (sys_mount+0x84/0xc4) [<c00c50bc>] (sys_mount+0x84/0xc4)
> from [<c0031ec0>] (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