Hi David, David Goodenough wrote: > Mancho, > > Can you package this up raise a ticket on Trac for OpenWrt and attach > the fix so that Florian can apply it. Attached a new 510-Yaffs to #1779 as yaffs_compat_modify.patch: https://dev.openwrt.org/attachment/ticket/1779/yaffs_compat_and_modify.patch. See also the comment: https://dev.openwrt.org/ticket/1779#comment:10 Guys, thank you for your support. mancho. > David > > On Wednesday 06 June 2007, Giampaolo Mancini wrote: >> 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; >>> } > > > > _______________________________________________ > yaffs mailing list > yaffs@lists.aleph1.co.uk > http://lists.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs > -- Giampaolo "mancho" Mancini Wi-Next Labs mailto:giampaolo.mancini@winext.eu mobile:(+39)3484148682 http://www.winext.eu