kernel 2.6.34 ; yaffs_guts.c,v 1.79 2009/03/05 01:45:28
VFS not found the symbol link on yaffs2 file system
#cd /mnt/bin
#ln -s busybox sl2bbx
#./sl2bbx
-sh: ./sl2bbx: not found
#cd /usr/sbin
#ln -s nanddump sl2ndmp
#./sl2ndmp
-sh: ./sl2ndmp: not found
turn on os trace:
# cd /mnt/bin
# ./sl2bbx
[ 1064.080000] yaffs locking
[ 1064.080000] yaffs locked
[ 1064.080000] yaffs_lookup for 261:sl2bbx
[ 1064.080000] yaffs unlocking
[ 1064.090000] yaffs_lookup found 590
[ 1064.090000] yaffs_get_inode for object 590
[ 1064.090000] yaffs_iget for 590
[ 1064.100000] yaffs locking
[ 1064.100000] yaffs locked
[ 1064.100000] yaffs_FillInode mode a1ff uid 0 gid 0 size 7 count 1
[ 1064.110000] yaffs unlocking
[ 1064.110000] yaffs_loookup dentry
[ 1064.120000] yaffs locking
[ 1064.120000] yaffs locked
[ 1064.120000] yaffs unlocking
[ 1064.130000] yaffs locking
[ 1064.130000] yaffs locked
[ 1064.130000] yaffs_lookup for 261:`q@sbox //fisrt 4 byte is wrong
, right is busybox
[ 1064.140000] yaffs unlocking
[ 1064.140000] yaffs_lookup not found
-sh: ./sl2bbx: not found
in yaffs_follow_link:
alias = yaffs_GetSymlinkAlias(yaffs_DentryToObject(dentry)); //
alias value is busybox
kfree(alias); //-----NOTE here ,after free alias, now the memory
hold alias is `q@sbox
return form yaffs_follow_link ,back to VFS ,and finally goto yaffs_lookup:
in yaffs_lookup:
T(YAFFS_TRACE_OS,
( "yaffs_lookup for %d:%s\n",
yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
} else {
T(YAFFS_TRACE_OS, ( "yaffs_lookup not found\n"));
}
//------NOTE HERE dentry->d_name.name is `q@sbox ,so we canot get the
real yaffs object(which should be busybox)
I think this is a problem of yaffs_follw_link, is there somebody else
get the same result?
Charles can you give some tip?