* Back out Patch by Christian Hohnstaedt, 23 Apr 2004:
  (JFFS2 speed enhancements) because of using non-public
  data (PHYS_FLASH_SECT_SIZE)

* Patch by Travis Sawyer, 23 Apr 2004:
  Fix VSC/CIS 8201 phy descrambler interoperability timing due to
  errata from Vitesse Semiconductor.
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index 5d0192c..10e6df8 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -114,7 +114,6 @@
 #include <common.h>
 #include <config.h>
 #include <malloc.h>
-#include <watchdog.h>
 #include <linux/stat.h>
 #include <linux/time.h>
 
@@ -127,7 +126,7 @@
 
 
 #define	NODE_CHUNK  	1024	/* size of memory allocation chunk in b_nodes */
-#define	SPIN_BLKSIZE	20  	/* spin after having scanned 1<<BLKSIZE bytes */
+#define	SPIN_BLKSIZE	18  	/* spin after having scanned 1<<BLKSIZE bytes */
 
 /* Debugging switches */
 #undef	DEBUG_DIRENTS		/* print directory entry list after scan */
@@ -277,10 +276,8 @@
 	"ZLIB"
 };
 
-#if 0  /* Use spinning wheel */
 /* Spinning wheel */
 static char spinner[] = { '|', '/', '-', '\\' };
-#endif
 
 /* Memory management */
 struct mem_block {
@@ -457,24 +454,15 @@
 {
 	char *max = part->offset + part->size - sizeof(struct jffs2_raw_inode);
 	char *offset = part->offset + start_offset;
-	int cntr = 0;
 	u32 off;
 
 	while (offset < max &&
 	       *(u32*)get_fl_mem((u32)offset, sizeof(u32), &off) == 0xFFFFFFFF) {
 		offset += sizeof(u32);
-		cntr++;
-#if 0  /* Use spinning wheel */
 		/* return if spinning is due */
 		if (((u32)offset & ((1 << SPIN_BLKSIZE)-1)) == 0) break;
-#endif
-		if (cntr > 1024 && part->erasesize > 0) { /* 4k */
-			/* round up to next erase block border */
-			(u32)offset |= part->erasesize-1;
-			offset++;
-			cntr = 0;
-		}
 	}
+
 	return offset - part->offset;
 }
 
@@ -933,9 +921,6 @@
 		for (i = 0; i < strlen(c) - 1; i++)
 			tmp[i] = c[i + 1];
 		tmp[i] = '\0';
-
-		WATCHDOG_RESET();
-
 		/* only a failure if we arent looking at top level */
 		if (!(pino = jffs2_1pass_find_inode(pL, working_tmp, pino)) &&
 		    (working_tmp[0])) {
@@ -1076,15 +1061,12 @@
 {
 	struct b_lists *pL;
 	struct jffs2_unknown_node *node;
-	struct jffs2_unknown_node crcnode;
 	u32 offset, oldoffset = 0;
 	u32 max = part->size - sizeof(struct jffs2_raw_inode);
 	u32 counter = 0;
 	u32 counter4 = 0;
 	u32 counterF = 0;
 	u32 counterN = 0;
-	u32 counterCRC = 0;
-	u32 counterUNK = 0;
 
 #if defined(CONFIG_JFFS2_NAND) && (CONFIG_COMMANDS & CFG_CMD_NAND)
 	nanddev = (int)part->usr_priv - 1;
@@ -1105,26 +1087,14 @@
 	/* start at the beginning of the partition */
 	while (offset < max) {
 	    	if ((oldoffset >> SPIN_BLKSIZE) != (offset >> SPIN_BLKSIZE)) {
-			WATCHDOG_RESET();
-#if 0  /* Use spinning wheel */
 			printf("\b\b%c ", spinner[counter++ % sizeof(spinner)]);
-#endif
 			oldoffset = offset;
 		}
-		node = (struct jffs2_unknown_node *) get_node_mem((u32)part->offset + offset);
-		if (node->magic == JFFS2_MAGIC_BITMASK) {
-			/* if its a fragment add it */
-			/* check crc by readding a JFFS2_NODE_ACCURATE */
-			crcnode.magic = node->magic;
-			crcnode.nodetype = node->nodetype | JFFS2_NODE_ACCURATE;
-			crcnode.totlen = node->totlen;
-			crcnode.hdr_crc = node->hdr_crc;
 
-			if (!hdr_crc(&crcnode)) {
-				offset += 4;
-				counterCRC++;
-				continue;
-			} else if (node->nodetype == JFFS2_NODETYPE_INODE &&
+		node = (struct jffs2_unknown_node *) get_node_mem((u32)part->offset + offset);
+		if (node->magic == JFFS2_MAGIC_BITMASK && hdr_crc(node)) {
+			/* if its a fragment add it */
+			if (node->nodetype == JFFS2_NODETYPE_INODE &&
 				    inode_crc((struct jffs2_raw_inode *) node)) {
 				if (insert_node(&pL->frag, (u32) part->offset +
 						offset) == NULL) {
@@ -1134,12 +1104,8 @@
 			} else if (node->nodetype == JFFS2_NODETYPE_DIRENT &&
 				   dirent_crc((struct jffs2_raw_dirent *) node)  &&
 				   dirent_name_crc((struct jffs2_raw_dirent *) node)) {
-				if (! (counterN%128))
-#if 0  /* Use spinning wheel */
+				if (! (counterN%100))
 					puts ("\b\b.  ");
-#else
-					puts (".");
-#endif
 				if (insert_node(&pL->dir, (u32) part->offset +
 						offset) == NULL) {
 					put_fl_mem(node);
@@ -1157,14 +1123,16 @@
 						"%d < %d\n", node->totlen,
 						sizeof(struct jffs2_unknown_node));
 			} else {
-				counterUNK++;
+				printf("Unknown node type: %x len %d "
+					"offset 0x%x\n", node->nodetype,
+					node->totlen, offset);
 			}
 			offset += ((node->totlen + 3) & ~3);
 			counterF++;
 		} else if (node->magic == JFFS2_EMPTY_BITMASK &&
 			   node->nodetype == JFFS2_EMPTY_BITMASK) {
 			offset = jffs2_scan_empty(offset, part);
-		} else { /* if we know nothing, we just step and look. */
+		} else {	/* if we know nothing, we just step and look. */
 			offset += 4;
 			counter4++;
 		}
@@ -1181,8 +1149,6 @@
 	putLabeledWord("frag entries = ", pL->frag.listCount);
 	putLabeledWord("+4 increments = ", counter4);
 	putLabeledWord("+file_offset increments = ", counterF);
-	putLabeledWord("Unknown node types = ", counterUNK);
-	putLabeledWord("Bad hdr_crc = ", counterCRC);
 
 #endif
 
@@ -1238,7 +1204,6 @@
 			return NULL;
 		}
 	}
-	WATCHDOG_RESET();
 	return (struct b_lists *)part->jffs2_priv;
 }
 
@@ -1248,21 +1213,24 @@
 jffs2_1pass_ls(struct part_info * part, const char *fname)
 {
 	struct b_lists *pl;
+	long ret = 0;
 	u32 inode;
 
 	if (! (pl = jffs2_get_list(part, "ls")))
 		return 0;
 
-
 	if (! (inode = jffs2_1pass_search_list_inodes(pl, fname, 1))) {
 		putstr("ls: Failed to scan jffs2 file structure\r\n");
 		return 0;
 	}
+
+
 #if 0
 	putLabeledWord("found file at inode = ", inode);
 	putLabeledWord("read_inode returns = ", ret);
 #endif
-	return inode;
+
+	return ret;
 }