Hello all, I am doing some development for an android 2.1 platform, and have observed some erroneous behavior from yaffs in the process that I was hoping to get assistance with. For our system, we are using yaffs2 to store our rootfs in a OneNAND flash. With the version of yaffs that comes stock with the android kernel, I have been able to mount the OneNAND, write the rootfs to OneNAND, sync, umount, and mount again to verify that byte for byte everything is written and read correctly. When I power cycle my device, however, the rootfs that is loaded from the OneNAND becomes inconsistent with what was written and verified. A hexdump on the differing files (mostly seemingly random binaries) shows that the rootfs loaded out of OneNAND after power cycling contains blocks of size 2k filled with zeros where I expect to see valid data. After browsing around the archives for this mailing list, I found a few threads that hinted at similar sounding issues that recommended doing a pull on the yaffs git repository and recompiling the kernel with the latest source. I have since done so, and after making some minor edits to the Makefile, was able to get a cleanly compiled kernel image. With this image, I am able to mount my rootfs from the OneNAND without receiving any error messages, but it appears that my rootfs is being erased in the process. When I cd into the OneNAND's mount point, I see only the lost+found directory. If I then revert back to my previous kernel (the one that uses the older version of yaffs that is distributed with android), I am able to mount the OneNAND, but still see only the lost+found directory. I have attempted to debug this issue as best as I can, but admittedly I am rather inexperienced when it comes to working with yaffs. I have tried setting a few of the trace flags available with /proc/yaffs, but have yet to come across any messages that stand out as being erroneous. If this is a known issue, or if I can provide any more specific information (output when running with specific trace flags, various snippets of source code, etc), let me know and I will be happy to oblige to the best of my ability. Thank you in advance, Jordan Wills For reference, the modifications I have made to the Makefile is appended below. I apologize for this incredibly crude means of conveying source code, but I am fairly new to communicating via mailing lists and do not yet know of a good means of hosting such files for easy access to all. Makefile distributed with Android: ># ># Makefile for the linux YAFFS filesystem routines. ># > >obj-$(CONFIG_YAFFS_FS) += yaffs.o > >yaffs-y := yaffs_ecc.o yaffs_fs.o yaffs_guts.o yaffs_checkptrw.o >yaffs-y += yaffs_packedtags1.o yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o >yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o >yaffs-y += yaffs_mtdif.o yaffs_mtdif1.o yaffs_mtdif2.o Makefile distributed with latest git clone of yaffs source: ># Main Makefile for out-of-tree yaffs2.ko building ># ># ># YAFFS: Yet Another Flash File System. A NAND-flash specific file system. ># ># Copyright (C) 2002-2010 Aleph One Ltd. ># for Toby Churchill Ltd and Brightstar Engineering ># ># Created by Charles Manning ># ># This program is free software; you can redistribute it and/or modify ># it under the terms of the GNU General Public License version 2 as ># published by the Free Software Foundation. > > >ifneq ($(KERNELRELEASE),) > EXTRA_CFLAGS += -DYAFFS_OUT_OF_TREE > > obj-m := yaffs2.o > > yaffs2-objs := yaffs_mtdif.o yaffs_mtdif2.o > yaffs2-objs += yaffs_mtdif1.o yaffs_packedtags1.o > yaffs2-objs += yaffs_ecc.o yaffs_fs.o yaffs_guts.o > yaffs2-objs += yaffs_packedtags2.o > yaffs2-objs += yaffs_tagscompat.o yaffs_tagsvalidity.o > yaffs2-objs += yaffs_checkptrw.o yaffs_nand.o > yaffs2-objs += yaffs_checkptrw.o yaffs_nand.o yaffs_nameval.o > yaffs2-objs += yaffs_allocator.o yaffs_bitmap.o > yaffs2-objs += yaffs_yaffs1.o > yaffs2-objs += yaffs_yaffs2.o > yaffs2-objs += yaffs_verify.o > >else > KERNELDIR ?= /lib/modules/$(shell uname -r)/build > PWD := $(shell pwd) > >modules default: > $(MAKE) -C $(KERNELDIR) M=$(PWD) modules > >mi modules_install: > $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install > >clean: > $(MAKE) -C $(KERNELDIR) M=$(PWD) clean >endif Makefile used in current systems (trying to compile Android's kernel with the Makefile provided from the yaffs git pull resulted in an inability to mount the OneNAND) ># ># Makefile for the linux YAFFS filesystem routines. ># > >obj-$(CONFIG_YAFFS_FS) += yaffs.o > >yaffs-y := yaffs_mtdif.o yaffs_mtdif2.o >yaffs-y += yaffs_mtdif1.o yaffs_packedtags1.o >yaffs-y += yaffs_ecc.o yaffs_fs.o yaffs_guts.o >yaffs-y += yaffs_packedtags2.o >yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o >yaffs-y += yaffs_checkptrw.o yaffs_nand.o >yaffs-y += yaffs_checkptrw.o yaffs_nand.o yaffs_nameval.o >yaffs-y += yaffs_allocator.o yaffs_bitmap.o >yaffs-y += yaffs_yaffs1.o >yaffs-y += yaffs_yaffs2.o >yaffs-y += yaffs_verify.o