[Yaffs] Avoid tagsEccUnfixed stats bump on mounting partiall…

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Todd Poynor
Date:  
To: yaffs
Subject: [Yaffs] Avoid tagsEccUnfixed stats bump on mounting partially used block
IIUC, yaffs1 compatibility mode checks tags ECCs and updates stats on
tags ECC errors when scanning an unused chunk of a partially-allocated
block at mount time. This causes a mildly alarming
"tagsEccUnfixed..... 1" in /proc/yaffs. Suggested fix below.

Signed-off-by: Todd Poynor <>

Index: yaffs_tagscompat.c
===================================================================
RCS file: /home/aleph1/cvs/yaffs2/yaffs_tagscompat.c,v
retrieving revision 1.7
diff -u -r1.7 yaffs_tagscompat.c
--- yaffs_tagscompat.c    20 Sep 2005 23:12:38 -0000    1.7
+++ yaffs_tagscompat.c    18 Nov 2005 04:03:47 -0000
@@ -455,20 +455,22 @@
             int deleted =
                 (yaffs_CountBits(spare.pageStatus) < 7) ? 1 : 0;


-            yaffs_GetTagsFromSpare(dev, &spare, &tags);
-
             eTags->chunkDeleted = deleted;
-            eTags->objectId = tags.objectId;
-            eTags->chunkId = tags.chunkId;
-            eTags->byteCount = tags.byteCount;
-            eTags->serialNumber = tags.serialNumber;
             eTags->eccResult = eccResult;
             eTags->blockBad = 0;    /* We're reading it */
             /* therefore it is not a bad block */
-
             eTags->chunkUsed =
                 (memcmp(&spareFF, &spare, sizeof(spareFF)) !=
                  0) ? 1 : 0;
+
+            if (eTags->chunkUsed) {
+                yaffs_GetTagsFromSpare(dev, &spare, &tags);
+
+                eTags->objectId = tags.objectId;
+                eTags->chunkId = tags.chunkId;
+                eTags->byteCount = tags.byteCount;
+                eTags->serialNumber = tags.serialNumber;
+            }
         }


         return YAFFS_OK;