Re: [Yaffs] bad block problem

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Todd Poynor
Date:  
To: Artis Kugevics
CC: yaffs
Subject: Re: [Yaffs] bad block problem
On Tue, Feb 28, 2006 at 02:45:00PM +0200, Artis Kugevics wrote:
...
> Index: yaffs_guts.c
> ===================================================================
> --- yaffs_guts.c        (revision 5760)
> +++ yaffs_guts.c        (working copy)
> @@ -409,6 +409,8 @@
>                         /* First check this chunk is erased... */
>  #ifndef CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK
>                         writeOk = yaffs_CheckChunkErased(dev, chunk);
> +#else
> +                       writeOk = 1;
>  #endif
>                         if (!writeOk) {
>                                 T(YAFFS_TRACE_ERROR,


Nathan Roberts also reported the above problem (failed write retires all
remaining good blocks when CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK is
set). The above or the following alternate is suggested for yaffs2
CVS. -- Todd

Index: yaffs_guts.c
===================================================================
RCS file: /home/aleph1/cvs/yaffs2/yaffs_guts.c,v
retrieving revision 1.30
diff -u -r1.30 yaffs_guts.c
--- yaffs_guts.c    1 Mar 2006 08:14:32 -0000    1.30
+++ yaffs_guts.c    6 Mar 2006 20:29:09 -0000
@@ -406,20 +406,19 @@


         if (chunk >= 0) {


-            /* First check this chunk is erased... */
 #ifndef CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK
+            /* First check this chunk is erased... */
             writeOk = yaffs_CheckChunkErased(dev, chunk);
-#endif
             if (!writeOk) {
                 T(YAFFS_TRACE_ERROR,
                   (TSTR
                    ("**>> yaffs chunk %d was not erased"
                     TENDSTR), chunk));
-            } else {
+            } else
+#endif
                 writeOk =
                     yaffs_WriteChunkWithTagsToNAND(dev, chunk,
                                    data, tags);
-            }
             attempts++;


             if (writeOk) {