On Wed, Apr 13, 2011 at 18:09, Mark Whitney
<markwhitney@gmail.com> wrote:
On Wed, Apr 13, 2011 at 17:55, Charles Manning
<manningc2@actrix.gen.nz> wrote:
On Thursday 14 April 2011 05:00:54 Mark Whitney wrote:
> I am using YAFFS2 from the 2.6.32 kernel on an integrated NAND flash device
> (running android 2.2.1_r1, if that matters).
>
> I am seeing 2 odd things, seems like they are related:
>
> 1. There are duplicate entries of the same directory (/data/system, below)
> when I do ls:
>
> bash-3.2# mount
> rootfs on / type rootfs (rw)
> /dev/root on / type yaffs2 (rw,relatime)
> tmpfs on /dev type tmpfs (rw,relatime,mode=755)
> devpts on /dev/pts type devpts (rw,relatime,mode=600)
> proc on /proc type proc (rw,relatime)
> sysfs on /sys type sysfs (rw,relatime)
> tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)
> tmpfs on /mnt/tmpfs type tmpfs (rw,relatime,size=194144k,mode=777,gid=1000)
> /dev/block/mtdblock7 on /data type yaffs2 (rw,nosuid,nodev,relatime)
> /dev/block/mtdblock8 on /cache type yaffs2 (rw,nosuid,nodev,relatime)
> bash-3.2# ls -ailp /data
> 1 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 ./
> 1 drwxrwxr-x 1 0 0 2048 Apr 13 13:50 ../
> 511 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 app/
> 510 drwxrwx--x 1 1000 1000 2048 Jan 1 2000
> app-private/
> 441 drwx------ 1 1000 1000 2048 Jan 1 2000 backup/
> 264 drwxrwx--x 1 1000 1000 2048 Jul 29 2009
> dalvik-cache/
> 509 drwxrwx--x 1 1000 1000 2048 Apr 13 16:47 data/
> 265 drwxr-x--- 1 0 1007 2048 Jan 1 2000 dontpanic/
> 497 drwxrwxrwx 1 1000 1000 2048 Apr 13 16:39 energyhub/
> 507 drwxrwx--x 1 2000 2000 2048 Jan 1 2000 local/
> 2 drwxrwx--- 1 0 0 2048 Jan 1 2000
> lost+found/ 499 drwxrwx--t 1 1000 9998 2048 Jan 1 2000
> misc/ 256 drwx------ 1 0 0 2048 Apr 13 16:38
> property/ 498 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:47
> system/ 498 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:47
> system/
>
>
> 2. My duplicate /data/system inode entry keeps swapping between 506 and 498
> when I reboot the device:
>
> bash-3.2# date; ls -ailp /data
> Wed Apr 13 16:46:32 UTC 2011
> 1 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 .
> 1 drwxrwxr-x 1 0 0 2048 Apr 13 13:50 ..
> 511 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 app
> 510 drwxrwx--x 1 1000 1000 2048 Jan 1 2000
> app-private 441 drwx------ 1 1000 1000 2048 Jan 1 2000
> backup 264 drwxrwx--x 1 1000 1000 2048 Jul 29 2009
> dalvik-cache
> 509 drwxrwx--x 1 1000 1000 2048 Apr 13 16:46 data
> 265 drwxr-x--- 1 0 1007 2048 Jan 1 2000 dontpanic
> 497 drwxrwxrwx 1 1000 1000 2048 Apr 13 16:39 energyhub
> 507 drwxrwx--x 1 2000 2000 2048 Jan 1 2000 local
> 2 drwxrwx--- 1 0 0 2048 Jan 1 2000 lost+found
> 499 drwxrwx--t 1 1000 9998 2048 Jan 1 2000 misc
> 256 drwx------ 1 0 0 2048 Apr 13 16:38 property
> 506 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:46 system
> 506 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:46 system
>
> ...
>
> <reboot>
> Linux version 2.6.32 (mark@eddie) (gcc version 4.3.3 (GCC) ) #2 Wed Mar 30
> 18:44:20 EDT 2011
>
> ...
>
> bash-3.2# date; ls -ailp /data
> Wed Apr 13 16:47:11 UTC 2011
> 1 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 .
> 1 drwxrwxr-x 1 0 0 2048 Apr 13 13:50 ..
> 511 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 app
> 510 drwxrwx--x 1 1000 1000 2048 Jan 1 2000
> app-private 441 drwx------ 1 1000 1000 2048 Jan 1 2000
> backup 264 drwxrwx--x 1 1000 1000 2048 Jul 29 2009
> dalvik-cache
> 509 drwxrwx--x 1 1000 1000 2048 Apr 13 16:46 data
> 265 drwxr-x--- 1 0 1007 2048 Jan 1 2000 dontpanic
> 497 drwxrwxrwx 1 1000 1000 2048 Apr 13 16:39 energyhub
> 507 drwxrwx--x 1 2000 2000 2048 Jan 1 2000 local
> 2 drwxrwx--- 1 0 0 2048 Jan 1 2000 lost+found
> 499 drwxrwx--t 1 1000 9998 2048 Jan 1 2000 misc
> 256 drwx------ 1 0 0 2048 Apr 13 16:38 property
> 498 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:45 system
> 498 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:45 system
>
> ...
>
> <reboot>
>
> ...
>
> bash-3.2# date; ls -ailp /data
> Wed Apr 13 16:55:26 UTC 2011
> 1 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 ./
> 1 drwxrwxr-x 1 0 0 2048 Apr 13 13:50 ../
> 511 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 app/
> 510 drwxrwx--x 1 1000 1000 2048 Jan 1 2000
> app-private/
> 441 drwx------ 1 1000 1000 2048 Jan 1 2000 backup/
> 264 drwxrwx--x 1 1000 1000 2048 Jul 29 2009
> dalvik-cache/
> 509 drwxrwx--x 1 1000 1000 2048 Apr 13 16:47 data/
> 265 drwxr-x--- 1 0 1007 2048 Jan 1 2000 dontpanic/
> 497 drwxrwxrwx 1 1000 1000 2048 Apr 13 16:39 energyhub/
> 507 drwxrwx--x 1 2000 2000 2048 Jan 1 2000 local/
> 2 drwxrwx--- 1 0 0 2048 Jan 1 2000
> lost+found/ 499 drwxrwx--t 1 1000 9998 2048 Jan 1 2000
> misc/ 256 drwx------ 1 0 0 2048 Apr 13 16:38
> property/ 506 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:46
> system/ 506 drwxrwxr-x 1 1000 1000 2048 Apr 13 16:46
> system/
>
There do indeed seem to be two inodes with the same name in the one directory.
They are: 506 and 498.
That is not what you see in ls because ls does a readdir to fetch a name then
uses lstat by name to get info about it. The look up will return the same
values each time.
The randomisation is likely caused by changes in the way the directory was
scanned and linked.
I can't figure out why the directory should have got into that state in the
first place.
A few more things:
I tried "mount -o remount" a few times on the /data partition and it did not flip the inode used for /data/system, only reboot seemed to trigger the swap.
As you might expect, when I moved the currently accessible copy of /data/system out of the way and rebooted, it just used the other copy from then on:
bash-3.2# ls -li /data/
511 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 app
510 drwxrwx--x 1 1000 1000 2048 Jan 1 2000 app-private
441 drwx------ 1 1000 1000 2048 Jan 1 2000 backup
264 drwxrwx--x 1 1000 1000 2048 Jul 29 2009 dalvik-cache
509 drwxrwx--x 1 1000 1000 2048 Apr 13 18:37 data
265 drwxr-x--- 1 0 1007 2048 Jan 1 2000 dontpanic
497 drwxrwxrwx 1 1000 1000 2048 Apr 13 18:48 energyhub
507 drwxrwx--x 1 2000 2000 2048 Jan 1 2000 local
2 drwxrwx--- 1 0 0 2048 Jan 1 2000 lost+found
499 drwxrwx--t 1 1000 9998 2048 Jan 1 2000 misc
256 drwx------ 1 0 0 2048 Apr 13 18:48 property
498 drwxrwxr-x 1 1000 1000 2048 Apr 13 18:48 system
506 drwxrwxr-x 1 1000 1000 2048 Apr 13 18:25 system.bak
After this I reinitialized the whole flash device with the same process a few more times and the problem did not happen again. From then on, /data/system consistently ended up with inode 506. Not sure if this is terribly useful info.
I saw this same duplicate-directory-entry issue again (this time with 2 different directories) on a second device.
There was is an error that appears on the console each time on boot:
yaffs: dev is 32505863 name is "mtdblock7"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.7, "mtdblock7"
yaffs tragedy: Bad object type, -1 != 15, for object 268435455 at chunk 67709 during scan
yaffs tragedy: Bad object type, 1 != 3, for object 266 at chunk 92802 during scan
yaffs_read_super: isCheckpointed 0
yaffs: dev is 32505864 name is "mtdblock8"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.8, "mtdblock8"
yaffs_read_super: isCheckpointed 0
I remember seeing a "yaffs tragedy" error msg on the last system, but I did not capture the error text, so I do not know if it was also a "Bad object type".
Is this helpful at all?