[Yaffs] Current git repository doesn't build on linux-2.6.32

Top Page
Attachments:
Message as email
+ (text/plain)
+ (text/html)
Delete this message
Reply to this message
Author: Peter Barada
Date:  
To: yaffs@lists.aleph1.co.uk
Subject: [Yaffs] Current git repository doesn't build on linux-2.6.32
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!