Hi Ian, it works! Now i can edit/modify the files without any problem. Do you still need some debugging on this? Many thaks! Bests, mancho. Ian McDonnell wrote: > Giampaolo, > > On Wednesday 06 June 2007 07:14, Giampaolo Mancini wrote: >>> There are some patches >>> committed by David on the openwrt svn but apparently there >>> are still a few problems. I now have backward >>> compatibility, since I can read the old nand/yaffs data but >>> I am unable to update any data after a first write to the >>> device. >> I'm also having the very same behavior on a RB153 with OpenWRT >> trunk's YAFFS: i can't modify any file on the YAFFS filesystem >> but moving the file to /tmp, editing there and then moving >> back to YAFFS filesystem does the job. > > Try applying this patch to yaffs_mtdif1.c. There is a problem > when compiled with the CONFIG_YAFFS_9BYTE_TAGS option -- > the line that sets 'shouldbeFF' to all ones, clobbers the > deleted status byte in pt1. This is surely going to mess-up file > updates. > > This patch includes some other tweaks for (missing) stats and > message formating that are in my working version which I diff'ed > with http://users.actrix.co.nz/manningc/yaffs2-ian-20070523.tgz > to generate the patch. It's the change for 'chunkDeleted' that > you need. > > -Ian > > --- yaffs_mtdif1.c-20070523 2007-05-17 11:52:39.000000000 -0400 > +++ yaffs_mtdif1.c 2007-06-06 12:45:03.000000000 -0400 > @@ -102,6 +102,8 @@ > compile_time_assertion(sizeof(yaffs_PackedTags1) == 12); > compile_time_assertion(sizeof(yaffs_Tags) == 8); > > + dev->nPageWrites++; > + > yaffs_PackTags1(&pt1, etags); > yaffs_CalcTagsECC((yaffs_Tags *)&pt1); > > @@ -178,6 +180,8 @@ > int retval; > int deleted; > > + dev->nPageReads++; > + > memset(&ops, 0, sizeof(ops)); > ops.mode = MTD_OOB_AUTO; > ops.len = (data) ? chunkBytes : 0; > @@ -237,7 +241,7 @@ > deleted = !pt1.deleted; > pt1.deleted = 1; > #else > - (void) deleted; /* not used */ > + deleted = (yaffs_CountBits(((__u8 *)&pt1)[8]) < 7); > #endif > > /* Check the packed tags mini-ECC and correct if necessary/possible. > @@ -250,7 +254,8 @@ > case 1: > /* recovered tags-ECC error */ > dev->tagsEccFixed++; > - eccres = YAFFS_ECC_RESULT_FIXED; > + if (eccres == YAFFS_ECC_RESULT_NO_ERROR) > + eccres = YAFFS_ECC_RESULT_FIXED; > break; > default: > /* unrecovered tags-ECC error */ > @@ -265,13 +270,8 @@ > yaffs_UnpackTags1(etags, &pt1); > etags->eccResult = eccres; > > - /* Set deleted state. > - */ > -#ifndef CONFIG_YAFFS_9BYTE_TAGS > + /* Set deleted state */ > etags->chunkDeleted = deleted; > -#else > - etags->chunkDeleted = (yaffs_CountBits(((__u8 *)&pt1)[8]) < 7); > -#endif > return YAFFS_OK; > } > > @@ -306,7 +306,7 @@ > > if (oobavail < YTAG1_SIZE) { > yaffs_trace(YAFFS_TRACE_ERROR, > - "mtd device has only %d bytes for tags, need %d", > + "mtd device has only %d bytes for tags, need %d\n", > oobavail, YTAG1_SIZE); > return YAFFS_FAIL; > } > > -- Giampaolo "mancho" Mancini Wi-Next Labs mailto:giampaolo.mancini@winext.eu mobile:(+39)3484148682 http://www.winext.eu