[OpenBIOS] r390 - ofw/fs/jffs2

svn at openbios.org svn at openbios.org
Wed May 16 11:22:10 CEST 2007


Author: wmb
Date: 2007-05-16 11:22:10 +0200 (Wed, 16 May 2007)
New Revision: 390

Modified:
   ofw/fs/jffs2/jffs2.fth
Log:
JFFS2 - Removed some unnecessary verbosity, and added some commented-out debugging code.




Modified: ofw/fs/jffs2/jffs2.fth
===================================================================
--- ofw/fs/jffs2/jffs2.fth	2007-05-16 09:05:57 UTC (rev 389)
+++ ofw/fs/jffs2/jffs2.fth	2007-05-16 09:22:10 UTC (rev 390)
@@ -262,8 +262,8 @@
    dup w@ case     ( len adr case: type )
       inode-type  of  scan-sum-inode   endof
       dirent-type of  scan-sum-dirent  endof
-      xattr-type  of  drop  d# 18   ." XA" cr   endof
-      xref-type   of  drop  6       ." R" cr   endof
+      xattr-type  of  drop  d# 18   ( ." XA" cr )  endof
+      xref-type   of  drop  6       ( ." R" cr  )  endof
       h# ffff     of  drop  dup  ( find-nonblank  )  endof  \ Keep scanning to end
       ." Unrecognized summary node type " dup .x cr  abort
    endcase
@@ -427,6 +427,80 @@
    pages/eblock +loop
 ;
 
+0 [if]
+/eblock value summary-start
+
+: .eb  ( -- )
+   the-eblock# .xxx
+;
+
+: xanother-node?  ( adr -- false | adr' true )
+   eb-end  swap  ?do
+      i w@ jffs2-magic =  if
+         i header-crc?  if
+            i +raw-node  eb-end  u<=  if
+               i true unloop  exit
+            then
+         then
+      then
+   loop
+   false
+;
+: .offset  ( adr -- )  ." offset " block-buf - . ." in " .eb  ;
+
+: check-node-data  ( adr -- )
+;
+Mitch_Bradley: the most common type of 'bad node'will have a mismatching data crc. And the node will end in 0xff 0xff 0xff .... when it wasn't intended to. Because of an interrupted write.
+[22:52]	<dwmw2_gone>	those ones are almost certainly harmless
+
+>	Mitch_Bradley: it should also always be true that there is no range of a file _not_ covered by a data node
+[22:54]	<dwmw2_gone>	even if it's just a "hole" node -- with JFFS2_COMPR_ZERO.
+[22:54]	<Mitch_Bradley>	oh, that's useful
+[22:54]	<dwmw2_gone>	I had to add those 'hole' nodes to deal with truncation and then later writes past the (new) end of the file
+
+: check-node  ( adr -- len )
+   dup w@ jffs2-magic =  if    ( adr )
+      dup header-crc?  if      ( adr )
+         dup +raw-node         ( adr adr' )
+         over - swap           ( len adr )
+         check-node-data       ( len )
+      else
+         ." Bad header CRC at " .offset
+         /eblock               ( len )
+      then                     ( len )
+   else                        ( adr )
+      check-em
+   then
+;
+
+: check-nodes  ( -- )
+   block-buf  summary-start  erased?  if  exit  then
+   block-buf  summary-start  bounds  ?do  i  check-node  +loop
+;
+
+: check-summary  ( -- )
+   /eblock to summary-start
+
+   \ Check magic number
+   block-buf /page + -1 j@  h# 02851885  <>  if   exit  then
+
+   block-buf /eblock + -2 j@  to summary-start
+
+   block-buf summary-start +  bad-summary?  if
+      ." Bad summary CRC for " .eb  exit
+   then
+;
+
+: check-blocks  ( -- )
+   pages/chip  0  do
+      i page>eblock  to the-eblock#
+      the-eblock# read-eblock
+      check-summary
+      check-nodes
+   pages/eblock +loop
+;
+[then]
+
 : place-node  ( node where -- )
    !
    next-minode  na1+  to next-minode  ( )
@@ -929,8 +1003,12 @@
 
    0 to seek-ptr                                ( )
 
-   set-sizes  allocate-buffers  scan-occupied   ( )
+   set-sizes  allocate-buffers                  ( )
 
+\   my-args " :check" $=  if  check-blocks true exit  then
+
+   scan-occupied                                ( )
+
    \ This is the value we will use for file-buf if we use read and seek
    next-inode to file-buf
 




More information about the OpenBIOS mailing list