[JFFS2] Debug code simplification, update TODO
authorArtem B. Bityutskiy <dedekind@infradead.org>
Thu, 22 Sep 2005 11:25:00 +0000 (12:25 +0100)
committerThomas Gleixner <tglx@mtd.linutronix.de>
Sun, 6 Nov 2005 21:20:33 +0000 (22:20 +0100)
Simplify the debugging code further.
Update the TODO list

Signed-off-by: Artem B. Bityutskiy <dedekind@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
14 files changed:
fs/jffs2/TODO
fs/jffs2/build.c
fs/jffs2/debug.c
fs/jffs2/debug.h
fs/jffs2/erase.c
fs/jffs2/malloc.c
fs/jffs2/nodelist.c
fs/jffs2/nodemgmt.c
fs/jffs2/os-linux.h
fs/jffs2/readinode.c
fs/jffs2/scan.c
fs/jffs2/summary.c
fs/jffs2/wbuf.c
include/linux/jffs2_fs_sb.h

index 2bff82f..d0e23b2 100644 (file)
@@ -1,5 +1,11 @@
-$Id: TODO,v 1.10 2002/09/09 16:31:21 dwmw2 Exp $
+$Id: TODO,v 1.18 2005/09/22 11:24:56 dedekind Exp $
 
+ - support asynchronous operation -- add a per-fs 'reserved_space' count,
+   let each outstanding write reserve the _maximum_ amount of physical
+   space it could take. Let GC flush the outstanding writes because the
+   reservations will necessarily be pessimistic. With this we could even
+   do shared writable mmap, if we can have a fs hook for do_wp_page() to
+   make the reservation.
  - disable compression in commit_write()?
  - fine-tune the allocation / GC thresholds
  - chattr support - turning on/off and tuning compression per-inode
@@ -11,26 +17,15 @@ $Id: TODO,v 1.10 2002/09/09 16:31:21 dwmw2 Exp $
  - test, test, test
 
  - NAND flash support:
-       - flush_wbuf using GC to fill it, don't just pad.
-       - Deal with write errors. Data don't get lost - we just have to write 
-         the affected node(s) out again somewhere else.
-       - make fsync flush only if actually required
-       - make sys_sync() work.
-       - reboot notifier
-       - timed flush of old wbuf
-       - fix magical second arg of jffs2_flush_wbuf(). Split into two or more functions instead.
-
+       - almost done :)
+       - use bad block check instead of the hardwired byte check
 
  - Optimisations:
-   - Stop GC from decompressing and immediately recompressing nodes which could
-     just be copied intact. (We now keep track of REF_PRISTINE flag. Easy now.)
-   - Furthermore, in the case where it could be copied intact we don't even need
-     to call iget() for it -- if we use (raw_node_raw->flash_offset & 2) as a flag
-     to show a node can be copied intact and it's _not_ in icache, we could just do
-     it, fix up the next_in_ino list and move on. We would need a way to find out
-     _whether_ it's in icache though -- if it's in icache we also need to do the 
-     fragment lists, etc. P'raps a flag or pointer in the jffs2_inode_cache could
-     help. (We have half of this now.)
+   - Split writes so they go to two separate blocks rather than just c->nextblock.
+       By writing _new_ nodes to one block, and garbage-collected REF_PRISTINE
+       nodes to a different one, we can separate clean nodes from those which
+       are likely to become dirty, and end up with blocks which are each far
+       closer to 100% or 0% clean, hence speeding up later GC progress dramatically.
    - Stop keeping name in-core with struct jffs2_full_dirent. If we keep the hash in 
      the full dirent, we only need to go to the flash in lookup() when we think we've
      got a match, and in readdir(). 
@@ -38,3 +33,8 @@ $Id: TODO,v 1.10 2002/09/09 16:31:21 dwmw2 Exp $
    - Remove totlen from jffs2_raw_node_ref? Need to have totlen passed into
        jffs2_mark_node_obsolete(). Can all callers work it out?
    - Remove size from jffs2_raw_node_frag. 
+
+dedekind:
+1. __jffs2_flush_wbuf() has a strange 'pad' parameter. Eliminate.
+2. get_sb()->build_fs()->scan() path... Why get_sb() removes scan()'s crap in
+   case of failure? scan() does not clean everything. Fix.
index f2cf562..ac393b3 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: build.c,v 1.79 2005/09/07 11:21:57 havasi Exp $
+ * $Id: build.c,v 1.83 2005/09/21 15:52:33 dedekind Exp $
  *
  */
 
@@ -18,7 +18,8 @@
 #include <linux/mtd/mtd.h>
 #include "nodelist.h"
 
-static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *, struct jffs2_inode_cache *, struct jffs2_full_dirent **);
+static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *,
+               struct jffs2_inode_cache *, struct jffs2_full_dirent **);
 
 static inline struct jffs2_inode_cache *
 first_inode_chain(int *i, struct jffs2_sb_info *c)
@@ -46,11 +47,12 @@ next_inode(int *i, struct jffs2_inode_cache *ic, struct jffs2_sb_info *c)
             ic = next_inode(&i, ic, (c)))
 
 
-static inline void jffs2_build_inode_pass1(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic)
+static inline void jffs2_build_inode_pass1(struct jffs2_sb_info *c,
+                                       struct jffs2_inode_cache *ic)
 {
        struct jffs2_full_dirent *fd;
 
-       D1(printk(KERN_DEBUG "jffs2_build_inode building directory inode #%u\n", ic->ino));
+       dbg_fsbuild("building directory inode #%u\n", ic->ino);
 
        /* For each child, increase nlink */
        for(fd = ic->scan_dents; fd; fd = fd->next) {
@@ -58,26 +60,23 @@ static inline void jffs2_build_inode_pass1(struct jffs2_sb_info *c, struct jffs2
                if (!fd->ino)
                        continue;
 
-               /* XXX: Can get high latency here with huge directories */
+               /* we can get high latency here with huge directories */
 
                child_ic = jffs2_get_ino_cache(c, fd->ino);
                if (!child_ic) {
-                       printk(KERN_NOTICE "Eep. Child \"%s\" (ino #%u) of dir ino #%u doesn't exist!\n",
+                       dbg_fsbuild("child \"%s\" (ino #%u) of dir ino #%u doesn't exist!\n",
                                  fd->name, fd->ino, ic->ino);
                        jffs2_mark_node_obsolete(c, fd->raw);
                        continue;
                }
 
                if (child_ic->nlink++ && fd->type == DT_DIR) {
-                       printk(KERN_NOTICE "Child dir \"%s\" (ino #%u) of dir ino #%u appears to be a hard link\n", fd->name, fd->ino, ic->ino);
-                       if (fd->ino == 1 && ic->ino == 1) {
-                               printk(KERN_NOTICE "This is mostly harmless, and probably caused by creating a JFFS2 image\n");
-                               printk(KERN_NOTICE "using a buggy version of mkfs.jffs2. Use at least v1.17.\n");
-                       }
-                       /* What do we do about it? */
+                       JFFS2_ERROR("child dir \"%s\" (ino #%u) of dir ino #%u appears to be a hard link\n",
+                               fd->name, fd->ino, ic->ino);
+                       /* TODO: What do we do about it? */
                }
-               D1(printk(KERN_DEBUG "Increased nlink for child \"%s\" (ino #%u)\n", fd->name, fd->ino));
-               /* Can't free them. We might need them in pass 2 */
+               dbg_fsbuild("increased nlink for child \"%s\" (ino #%u)\n", fd->name, fd->ino);
+               /* Can't free scan_dents so far. We might need them in pass 2 */
        }
 }
 
@@ -94,6 +93,8 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c)
        struct jffs2_full_dirent *fd;
        struct jffs2_full_dirent *dead_fds = NULL;
 
+       dbg_fsbuild("build FS data structures\n");
+
        /* First, scan the medium and build all the inode caches with
           lists of physical nodes */
 
@@ -103,33 +104,29 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c)
        if (ret)
                goto exit;
 
-       D1(printk(KERN_DEBUG "Scanned flash completely\n"));
+       dbg_fsbuild("scanned flash completely\n");
        jffs2_dbg_dump_block_lists_nolock(c);
 
+       dbg_fsbuild("pass 1 starting\n");
        c->flags |= JFFS2_SB_FLAG_BUILDING;
        /* Now scan the directory tree, increasing nlink according to every dirent found. */
        for_each_inode(i, c, ic) {
-               D1(printk(KERN_DEBUG "Pass 1: ino #%u\n", ic->ino));
-
-               D1(BUG_ON(ic->ino > c->highest_ino));
-
                if (ic->scan_dents) {
                        jffs2_build_inode_pass1(c, ic);
                        cond_resched();
                }
        }
 
-       D1(printk(KERN_DEBUG "Pass 1 complete\n"));
+       dbg_fsbuild("pass 1 complete\n");
 
        /* Next, scan for inodes with nlink == 0 and remove them. If
           they were directories, then decrement the nlink of their
           children too, and repeat the scan. As that's going to be
           a fairly uncommon occurrence, it's not so evil to do it this
           way. Recursion bad. */
-       D1(printk(KERN_DEBUG "Pass 2 starting\n"));
+       dbg_fsbuild("pass 2 starting\n");
 
        for_each_inode(i, c, ic) {
-               D1(printk(KERN_DEBUG "Pass 2: ino #%u, nlink %d, ic %p, nodes %p\n", ic->ino, ic->nlink, ic, ic->nodes));
                if (ic->nlink)
                        continue;
                        
@@ -137,26 +134,24 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c)
                cond_resched();
        } 
 
-       D1(printk(KERN_DEBUG "Pass 2a starting\n"));
+       dbg_fsbuild("pass 2a starting\n");
 
        while (dead_fds) {
                fd = dead_fds;
                dead_fds = fd->next;
 
                ic = jffs2_get_ino_cache(c, fd->ino);
-               D1(printk(KERN_DEBUG "Removing dead_fd ino #%u (\"%s\"), ic at %p\n", fd->ino, fd->name, ic));
 
                if (ic)
                        jffs2_build_remove_unlinked_inode(c, ic, &dead_fds);
                jffs2_free_full_dirent(fd);
        }
 
-       D1(printk(KERN_DEBUG "Pass 2 complete\n"));
+       dbg_fsbuild("pass 2a complete\n");
+       dbg_fsbuild("freeing temporary data structures\n");
        
        /* Finally, we can scan again and free the dirent structs */
        for_each_inode(i, c, ic) {
-               D1(printk(KERN_DEBUG "Pass 3: ino #%u, ic %p, nodes %p\n", ic->ino, ic, ic->nodes));
-
                while(ic->scan_dents) {
                        fd = ic->scan_dents;
                        ic->scan_dents = fd->next;
@@ -167,8 +162,7 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c)
        }
        c->flags &= ~JFFS2_SB_FLAG_BUILDING;
        
-       D1(printk(KERN_DEBUG "Pass 3 complete\n"));
-       jffs2_dbg_dump_block_lists_nolock(c);
+       dbg_fsbuild("FS build complete\n");
 
        /* Rotate the lists by some number to ensure wear levelling */
        jffs2_rotate_lists(c);
@@ -189,24 +183,26 @@ exit:
        return ret;
 }
 
-static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic, struct jffs2_full_dirent **dead_fds)
+static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c,
+                                       struct jffs2_inode_cache *ic,
+                                       struct jffs2_full_dirent **dead_fds)
 {
        struct jffs2_raw_node_ref *raw;
        struct jffs2_full_dirent *fd;
 
-       D1(printk(KERN_DEBUG "JFFS2: Removing ino #%u with nlink == zero.\n", ic->ino));
+       dbg_fsbuild("removing ino #%u with nlink == zero.\n", ic->ino);
        
        raw = ic->nodes;
        while (raw != (void *)ic) {
                struct jffs2_raw_node_ref *next = raw->next_in_ino;
-               D1(printk(KERN_DEBUG "obsoleting node at 0x%08x\n", ref_offset(raw)));
+               dbg_fsbuild("obsoleting node at 0x%08x\n", ref_offset(raw));
                jffs2_mark_node_obsolete(c, raw);
                raw = next;
        }
 
        if (ic->scan_dents) {
                int whinged = 0;
-               D1(printk(KERN_DEBUG "Inode #%u was a directory which may have children...\n", ic->ino));
+               dbg_fsbuild("inode #%u was a directory which may have children...\n", ic->ino);
 
                while(ic->scan_dents) {
                        struct jffs2_inode_cache *child_ic;
@@ -216,21 +212,19 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, struct jf
 
                        if (!fd->ino) {
                                /* It's a deletion dirent. Ignore it */
-                               D1(printk(KERN_DEBUG "Child \"%s\" is a deletion dirent, skipping...\n", fd->name));
+                               dbg_fsbuild("child \"%s\" is a deletion dirent, skipping...\n", fd->name);
                                jffs2_free_full_dirent(fd);
                                continue;
                        }
-                       if (!whinged) {
+                       if (!whinged)
                                whinged = 1;
-                               printk(KERN_NOTICE "Inode #%u was a directory with children - removing those too...\n", ic->ino);
-                       }
 
-                       D1(printk(KERN_DEBUG "Removing child \"%s\", ino #%u\n",
-                                 fd->name, fd->ino));
+                       dbg_fsbuild("removing child \"%s\", ino #%u\n", fd->name, fd->ino);
                        
                        child_ic = jffs2_get_ino_cache(c, fd->ino);
                        if (!child_ic) {
-                               printk(KERN_NOTICE "Cannot remove child \"%s\", ino #%u, because it doesn't exist\n", fd->name, fd->ino);
+                               dbg_fsbuild("cannot remove child \"%s\", ino #%u, because it doesn't exist\n",
+                                               fd->name, fd->ino);
                                jffs2_free_full_dirent(fd);
                                continue;
                        }
@@ -241,13 +235,13 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, struct jf
                        child_ic->nlink--;
                        
                        if (!child_ic->nlink) {
-                               D1(printk(KERN_DEBUG "Inode #%u (\"%s\") has now got zero nlink. Adding to dead_fds list.\n",
-                                         fd->ino, fd->name));
+                               dbg_fsbuild("inode #%u (\"%s\") has now got zero nlink, adding to dead_fds list.\n",
+                                         fd->ino, fd->name);
                                fd->next = *dead_fds;
                                *dead_fds = fd;
                        } else {
-                               D1(printk(KERN_DEBUG "Inode #%u (\"%s\") has now got nlink %d. Ignoring.\n",
-                                         fd->ino, fd->name, child_ic->nlink));
+                               dbg_fsbuild("inode #%u (\"%s\") has now got nlink %d. Ignoring.\n",
+                                         fd->ino, fd->name, child_ic->nlink);
                                jffs2_free_full_dirent(fd);
                        }
                }
@@ -295,20 +289,20 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c)
           trying to GC to make more space. It'll be a fruitless task */
        c->nospc_dirty_size = c->sector_size + (c->flash_size / 100);
 
-       D1(printk(KERN_DEBUG "JFFS2 trigger levels (size %d KiB, block size %d KiB, %d blocks)\n",
-                 c->flash_size / 1024, c->sector_size / 1024, c->nr_blocks));
-       D1(printk(KERN_DEBUG "Blocks required to allow deletion:    %d (%d KiB)\n",
-                 c->resv_blocks_deletion, c->resv_blocks_deletion*c->sector_size/1024));
-       D1(printk(KERN_DEBUG "Blocks required to allow writes:      %d (%d KiB)\n",
-                 c->resv_blocks_write, c->resv_blocks_write*c->sector_size/1024));
-       D1(printk(KERN_DEBUG "Blocks required to quiesce GC thread: %d (%d KiB)\n",
-                 c->resv_blocks_gctrigger, c->resv_blocks_gctrigger*c->sector_size/1024));
-       D1(printk(KERN_DEBUG "Blocks required to allow GC merges:   %d (%d KiB)\n",
-                 c->resv_blocks_gcmerge, c->resv_blocks_gcmerge*c->sector_size/1024));
-       D1(printk(KERN_DEBUG "Blocks required to GC bad blocks:     %d (%d KiB)\n",
-                 c->resv_blocks_gcbad, c->resv_blocks_gcbad*c->sector_size/1024));
-       D1(printk(KERN_DEBUG "Amount of dirty space required to GC: %d bytes\n",
-                 c->nospc_dirty_size));
+       dbg_fsbuild("JFFS2 trigger levels (size %d KiB, block size %d KiB, %d blocks)\n",
+                 c->flash_size / 1024, c->sector_size / 1024, c->nr_blocks);
+       dbg_fsbuild("Blocks required to allow deletion:    %d (%d KiB)\n",
+                 c->resv_blocks_deletion, c->resv_blocks_deletion*c->sector_size/1024);
+       dbg_fsbuild("Blocks required to allow writes:      %d (%d KiB)\n",
+                 c->resv_blocks_write, c->resv_blocks_write*c->sector_size/1024);
+       dbg_fsbuild("Blocks required to quiesce GC thread: %d (%d KiB)\n",
+                 c->resv_blocks_gctrigger, c->resv_blocks_gctrigger*c->sector_size/1024);
+       dbg_fsbuild("Blocks required to allow GC merges:   %d (%d KiB)\n",
+                 c->resv_blocks_gcmerge, c->resv_blocks_gcmerge*c->sector_size/1024);
+       dbg_fsbuild("Blocks required to GC bad blocks:     %d (%d KiB)\n",
+                 c->resv_blocks_gcbad, c->resv_blocks_gcbad*c->sector_size/1024);
+       dbg_fsbuild("Amount of dirty space required to GC: %d bytes\n",
+                 c->nospc_dirty_size);
 } 
 
 int jffs2_do_mount_fs(struct jffs2_sb_info *c)
@@ -358,7 +352,7 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c)
                return ret;
 
        if (jffs2_build_filesystem(c)) {
-               D1(printk(KERN_DEBUG "build_fs failed\n"));
+               dbg_fsbuild("build_fs failed\n");
                jffs2_free_ino_caches(c);
                jffs2_free_raw_node_refs(c);
 #ifndef __ECOS
index 2898350..0947284 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: debug.c,v 1.10 2005/09/14 16:57:32 dedekind Exp $
+ * $Id: debug.c,v 1.11 2005/09/21 13:28:35 dedekind Exp $
  *
  */
 #include <linux/kernel.h>
@@ -15,6 +15,7 @@
 #include <linux/pagemap.h>
 #include <linux/crc32.h>
 #include <linux/jffs2.h>
+#include <linux/mtd/mtd.h>
 #include "nodelist.h"
 #include "debug.h"
 
index 7328e67..da1417d 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: debug.h,v 1.16 2005/09/14 16:57:32 dedekind Exp $
+ * $Id: debug.h,v 1.18 2005/09/21 10:26:26 dedekind Exp $
  *
  */
 #ifndef _JFFS2_DEBUG_H_
 /* Enable "paranoia" checks and dumps */
 #define JFFS2_DBG_PARANOIA_CHECKS
 #define JFFS2_DBG_DUMPS
+
+/* 
+ * By defining/undefining the below macros one may select debugging messages
+ * fro specific JFFS2 subsystems.
+ */
 #define JFFS2_DBG_READINODE_MESSAGES
 #define JFFS2_DBG_FRAGTREE_MESSAGES
 #define JFFS2_DBG_DENTLIST_MESSAGES
 #define JFFS2_DBG_NODEREF_MESSAGES
 #define JFFS2_DBG_INOCACHE_MESSAGES
 #define JFFS2_DBG_SUMMARY_MESSAGES
+#define JFFS2_DBG_FSBUILD_MESSAGES
 #endif
 
 #if CONFIG_JFFS2_FS_DEBUG == 2
 #define JFFS2_DBG_FRAGTREE2_MESSAGES
+#define JFFS2_DBG_MEMALLOC_MESSAGES
 #endif
 
 /* Sanity checks are supposed to be light-weight and enabled by default */
@@ -40,7 +47,7 @@
 
 /* 
  * Dx() are mainly used for debugging messages, they must go away and be
- * superseded by nicer JFFS2_DBG_XXX() macros...
+ * superseded by nicer dbg_xxx() macros...
  */
 #if CONFIG_JFFS2_FS_DEBUG > 0
 #define D1(x) x
  */
 /* Read inode debugging messages */
 #ifdef JFFS2_DBG_READINODE_MESSAGES
-#define JFFS2_DBG_READINODE(fmt, ...)  JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_readinode(fmt, ...)        JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_READINODE(fmt, ...)
+#define dbg_readinode(fmt, ...)
 #endif
 
 /* Fragtree build debugging messages */
 #ifdef JFFS2_DBG_FRAGTREE_MESSAGES
-#define JFFS2_DBG_FRAGTREE(fmt, ...)   JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_fragtree(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_FRAGTREE(fmt, ...)
+#define dbg_fragtree(fmt, ...)
 #endif
 #ifdef JFFS2_DBG_FRAGTREE2_MESSAGES
-#define JFFS2_DBG_FRAGTREE2(fmt, ...)  JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_fragtree2(fmt, ...)        JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_FRAGTREE2(fmt, ...)
+#define dbg_fragtree2(fmt, ...)
 #endif
 
 /* Directory entry list manilulation debugging messages */
 #ifdef JFFS2_DBG_DENTLIST_MESSAGES
-#define JFFS2_DBG_DENTLIST(fmt, ...)   JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_dentlist(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_DENTLIST(fmt, ...)
+#define dbg_dentlist(fmt, ...)
 #endif
 
 /* Print the messages about manipulating node_refs */
 #ifdef JFFS2_DBG_NODEREF_MESSAGES
-#define JFFS2_DBG_NODEREF(fmt, ...)    JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_noderef(fmt, ...)  JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_NODEREF(fmt, ...)
+#define dbg_noderef(fmt, ...)
 #endif
 
 /* Manipulations with the list of inodes (JFFS2 inocache) */
 #ifdef JFFS2_DBG_INOCACHE_MESSAGES
-#define JFFS2_DBG_INOCACHE(fmt, ...)   JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_inocache(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_INOCACHE(fmt, ...)
+#define dbg_inocache(fmt, ...)
 #endif
 
 /* Summary debugging messages */
 #ifdef JFFS2_DBG_SUMMARY_MESSAGES
-#define JFFS2_DBG_SUMMARY(fmt, ...)    JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_summary(fmt, ...)  JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#else
+#define dbg_summary(fmt, ...)
+#endif
+
+/* File system build messages */
+#ifdef JFFS2_DBG_FSBUILD_MESSAGES
+#define dbg_fsbuild(fmt, ...)  JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_SUMMARY(fmt, ...)
+#define dbg_fsbuild(fmt, ...)
 #endif
 
 /* Watch the object allocations */
 #ifdef JFFS2_DBG_MEMALLOC_MESSAGES
-#define JFFS2_DBG_MEMALLOC(fmt, ...)   JFFS2_DEBUG(fmt, ##__VA_ARGS__)
+#define dbg_memalloc(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__)
 #else
-#define JFFS2_DBG_MEMALLOC(fmt, ...)
+#define dbg_memalloc(fmt, ...)
 #endif
 
 
index a8a0908..347de4e 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: erase.c,v 1.83 2005/07/22 10:32:08 dedekind Exp $
+ * $Id: erase.c,v 1.85 2005/09/20 14:53:15 dedekind Exp $
  *
  */
 
index 7348011..f27df01 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: malloc.c,v 1.29 2005/07/27 14:16:53 dedekind Exp $
+ * $Id: malloc.c,v 1.30 2005/09/20 14:27:34 dedekind Exp $
  *
  */
 
@@ -97,13 +97,13 @@ struct jffs2_full_dirent *jffs2_alloc_full_dirent(int namesize)
 {
        struct jffs2_full_dirent *ret;
        ret = kmalloc(sizeof(struct jffs2_full_dirent) + namesize, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n", ret);
+       dbg_memalloc("%p\n", ret);
        return ret;
 }
 
 void jffs2_free_full_dirent(struct jffs2_full_dirent *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kfree(x);
 }
 
@@ -111,13 +111,13 @@ struct jffs2_full_dnode *jffs2_alloc_full_dnode(void)
 {
        struct jffs2_full_dnode *ret;
        ret = kmem_cache_alloc(full_dnode_slab, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n", ret);
+       dbg_memalloc("%p\n", ret);
        return ret;
 }
 
 void jffs2_free_full_dnode(struct jffs2_full_dnode *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kmem_cache_free(full_dnode_slab, x);
 }
 
@@ -125,13 +125,13 @@ struct jffs2_raw_dirent *jffs2_alloc_raw_dirent(void)
 {
        struct jffs2_raw_dirent *ret;
        ret = kmem_cache_alloc(raw_dirent_slab, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n", ret);
+       dbg_memalloc("%p\n", ret);
        return ret;
 }
 
 void jffs2_free_raw_dirent(struct jffs2_raw_dirent *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kmem_cache_free(raw_dirent_slab, x);
 }
 
@@ -139,13 +139,13 @@ struct jffs2_raw_inode *jffs2_alloc_raw_inode(void)
 {
        struct jffs2_raw_inode *ret;
        ret = kmem_cache_alloc(raw_inode_slab, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n", ret);
+       dbg_memalloc("%p\n", ret);
        return ret;
 }
 
 void jffs2_free_raw_inode(struct jffs2_raw_inode *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kmem_cache_free(raw_inode_slab, x);
 }
 
@@ -153,14 +153,14 @@ struct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void)
 {
        struct jffs2_tmp_dnode_info *ret;
        ret = kmem_cache_alloc(tmp_dnode_info_slab, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n",
+       dbg_memalloc("%p\n",
                ret);
        return ret;
 }
 
 void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kmem_cache_free(tmp_dnode_info_slab, x);
 }
 
@@ -168,13 +168,13 @@ struct jffs2_raw_node_ref *jffs2_alloc_raw_node_ref(void)
 {
        struct jffs2_raw_node_ref *ret;
        ret = kmem_cache_alloc(raw_node_ref_slab, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n", ret);
+       dbg_memalloc("%p\n", ret);
        return ret;
 }
 
 void jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kmem_cache_free(raw_node_ref_slab, x);
 }
 
@@ -182,13 +182,13 @@ struct jffs2_node_frag *jffs2_alloc_node_frag(void)
 {
        struct jffs2_node_frag *ret;
        ret = kmem_cache_alloc(node_frag_slab, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n", ret);
+       dbg_memalloc("%p\n", ret);
        return ret;
 }
 
 void jffs2_free_node_frag(struct jffs2_node_frag *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kmem_cache_free(node_frag_slab, x);
 }
 
@@ -196,12 +196,12 @@ struct jffs2_inode_cache *jffs2_alloc_inode_cache(void)
 {
        struct jffs2_inode_cache *ret;
        ret = kmem_cache_alloc(inode_cache_slab, GFP_KERNEL);
-       JFFS2_DBG_MEMALLOC("%p\n", ret);
+       dbg_memalloc("%p\n", ret);
        return ret;
 }
 
 void jffs2_free_inode_cache(struct jffs2_inode_cache *x)
 {
-       JFFS2_DBG_MEMALLOC("%p\n", x);
+       dbg_memalloc("%p\n", x);
        kmem_cache_free(inode_cache_slab, x);
 }
index 9abb5f4..80fe8fe 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: nodelist.c,v 1.112 2005/08/22 09:07:09 dedekind Exp $
+ * $Id: nodelist.c,v 1.114 2005/09/21 13:28:35 dedekind Exp $
  *
  */
 
@@ -25,18 +25,18 @@ void jffs2_add_fd_to_list(struct jffs2_sb_info *c, struct jffs2_full_dirent *new
 {
        struct jffs2_full_dirent **prev = list;
        
-       JFFS2_DBG_DENTLIST("add dirent \"%s\", ino #%u\n", new->name, new->ino);
+       dbg_dentlist("add dirent \"%s\", ino #%u\n", new->name, new->ino);
 
        while ((*prev) && (*prev)->nhash <= new->nhash) {
                if ((*prev)->nhash == new->nhash && !strcmp((*prev)->name, new->name)) {
                        /* Duplicate. Free one */
                        if (new->version < (*prev)->version) {
-                               JFFS2_DBG_DENTLIST("Eep! Marking new dirent node is obsolete, old is \"%s\", ino #%u\n",
+                               dbg_dentlist("Eep! Marking new dirent node is obsolete, old is \"%s\", ino #%u\n",
                                        (*prev)->name, (*prev)->ino);
                                jffs2_mark_node_obsolete(c, new->raw);
                                jffs2_free_full_dirent(new);
                        } else {
-                               JFFS2_DBG_DENTLIST("marking old dirent \"%s\", ino #%u bsolete\n",
+                               dbg_dentlist("marking old dirent \"%s\", ino #%u bsolete\n",
                                        (*prev)->name, (*prev)->ino);
                                new->next = (*prev)->next;
                                jffs2_mark_node_obsolete(c, ((*prev)->raw));
@@ -55,7 +55,7 @@ void jffs2_truncate_fragtree(struct jffs2_sb_info *c, struct rb_root *list, uint
 {
        struct jffs2_node_frag *frag = jffs2_lookup_node_frag(list, size);
 
-       JFFS2_DBG_FRAGTREE("truncating fragtree to 0x%08x bytes\n", size);
+       dbg_fragtree("truncating fragtree to 0x%08x bytes\n", size);
 
        /* We know frag->ofs <= size. That's what lookup does for us */
        if (frag && frag->ofs != size) {
@@ -81,7 +81,7 @@ void jffs2_truncate_fragtree(struct jffs2_sb_info *c, struct rb_root *list, uint
         */
        frag = frag_last(list);
        if (frag->node && (frag->ofs & (PAGE_CACHE_SIZE - 1)) == 0) {
-               JFFS2_DBG_FRAGTREE2("marking the last fragment 0x%08x-0x%08x REF_PRISTINE.\n",
+               dbg_fragtree2("marking the last fragment 0x%08x-0x%08x REF_PRISTINE.\n",
                        frag->ofs, frag->ofs + frag->size); 
                frag->node->raw->flash_offset = ref_offset(frag->node->raw) | REF_PRISTINE;
        }
@@ -93,12 +93,12 @@ void jffs2_obsolete_node_frag(struct jffs2_sb_info *c, struct jffs2_node_frag *t
                this->node->frags--;
                if (!this->node->frags) {
                        /* The node has no valid frags left. It's totally obsoleted */
-                       JFFS2_DBG_FRAGTREE2("marking old node @0x%08x (0x%04x-0x%04x) obsolete\n",
+                       dbg_fragtree2("marking old node @0x%08x (0x%04x-0x%04x) obsolete\n",
                                ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size);
                        jffs2_mark_node_obsolete(c, this->node->raw);
                        jffs2_free_full_dnode(this->node);
                } else {
-                       JFFS2_DBG_FRAGTREE2("marking old node @0x%08x (0x%04x-0x%04x) REF_NORMAL. frags is %d\n",
+                       dbg_fragtree2("marking old node @0x%08x (0x%04x-0x%04x) REF_NORMAL. frags is %d\n",
                                ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size, this->node->frags);
                        mark_ref_normal(this->node->raw);
                }
@@ -112,7 +112,7 @@ static void jffs2_fragtree_insert(struct jffs2_node_frag *newfrag, struct jffs2_
        struct rb_node *parent = &base->rb;
        struct rb_node **link = &parent;
 
-       JFFS2_DBG_FRAGTREE2("insert frag (0x%04x-0x%04x)\n", newfrag->ofs, newfrag->ofs + newfrag->size);
+       dbg_fragtree2("insert frag (0x%04x-0x%04x)\n", newfrag->ofs, newfrag->ofs + newfrag->size);
 
        while (*link) {
                parent = *link;
@@ -172,11 +172,11 @@ static int no_overlapping_node(struct jffs2_sb_info *c, struct rb_root *root,
                        /* By definition, the 'this' node has no right-hand child, 
                           because there are no frags with offset greater than it.
                           So that's where we want to put the hole */
-                       JFFS2_DBG_FRAGTREE2("add hole frag %#04x-%#04x on the right of the new frag.\n",
+                       dbg_fragtree2("add hole frag %#04x-%#04x on the right of the new frag.\n",
                                holefrag->ofs, holefrag->ofs + holefrag->size);
                        rb_link_node(&holefrag->rb, &this->rb, &this->rb.rb_right);
                } else {
-                       JFFS2_DBG_FRAGTREE2("Add hole frag %#04x-%#04x to the root of the tree.\n",
+                       dbg_fragtree2("Add hole frag %#04x-%#04x to the root of the tree.\n",
                                holefrag->ofs, holefrag->ofs + holefrag->size);
                        rb_link_node(&holefrag->rb, NULL, &root->rb_node);
                }
@@ -188,10 +188,10 @@ static int no_overlapping_node(struct jffs2_sb_info *c, struct rb_root *root,
                /* By definition, the 'this' node has no right-hand child, 
                   because there are no frags with offset greater than it.
                   So that's where we want to put new fragment */
-               JFFS2_DBG_FRAGTREE2("add the new node at the right\n");
+               dbg_fragtree2("add the new node at the right\n");
                rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right);                      
        } else {
-               JFFS2_DBG_FRAGTREE2("insert the new node at the root of the tree\n");
+               dbg_fragtree2("insert the new node at the root of the tree\n");
                rb_link_node(&newfrag->rb, NULL, &root->rb_node);
        }
        rb_insert_color(&newfrag->rb, root);
@@ -209,11 +209,11 @@ static int jffs2_add_frag_to_fragtree(struct jffs2_sb_info *c, struct rb_root *r
        this = jffs2_lookup_node_frag(root, newfrag->node->ofs);
 
        if (this) {
-               JFFS2_DBG_FRAGTREE2("lookup gave frag 0x%04x-0x%04x; phys 0x%08x (*%p)\n",
+               dbg_fragtree2("lookup gave frag 0x%04x-0x%04x; phys 0x%08x (*%p)\n",
                          this->ofs, this->ofs+this->size, this->node?(ref_offset(this->node->raw)):0xffffffff, this);
                lastend = this->ofs + this->size;
        } else {
-               JFFS2_DBG_FRAGTREE2("lookup gave no frag\n");
+               dbg_fragtree2("lookup gave no frag\n");
                lastend = 0;
        }
                          
@@ -235,11 +235,11 @@ static int jffs2_add_frag_to_fragtree(struct jffs2_sb_info *c, struct rb_root *r
        }
 
        if (this->node)
-               JFFS2_DBG_FRAGTREE2("dealing with frag %u-%u, phys %#08x(%d).\n",
+               dbg_fragtree2("dealing with frag %u-%u, phys %#08x(%d).\n",
                this->ofs, this->ofs + this->size,
                ref_offset(this->node->raw), ref_flags(this->node->raw));
        else
-               JFFS2_DBG_FRAGTREE2("dealing with hole frag %u-%u.\n",
+               dbg_fragtree2("dealing with hole frag %u-%u.\n",
                this->ofs, this->ofs + this->size);
 
        /* OK. 'this' is pointing at the first frag that newfrag->ofs at least partially obsoletes,
@@ -259,10 +259,10 @@ static int jffs2_add_frag_to_fragtree(struct jffs2_sb_info *c, struct rb_root *r
                        struct jffs2_node_frag *newfrag2;
 
                        if (this->node)
-                               JFFS2_DBG_FRAGTREE2("split old frag 0x%04x-0x%04x, phys 0x%08x\n",
+                               dbg_fragtree2("split old frag 0x%04x-0x%04x, phys 0x%08x\n",
                                        this->ofs, this->ofs+this->size, ref_offset(this->node->raw));
                        else 
-                               JFFS2_DBG_FRAGTREE2("split old hole frag 0x%04x-0x%04x\n",
+                               dbg_fragtree2("split old hole frag 0x%04x-0x%04x\n",
                                        this->ofs, this->ofs+this->size);
                        
                        /* New second frag pointing to this's node */
@@ -299,13 +299,13 @@ static int jffs2_add_frag_to_fragtree(struct jffs2_sb_info *c, struct rb_root *r
        } else {
                /* New frag starts at the same point as 'this' used to. Replace 
                   it in the tree without doing a delete and insertion */
-               JFFS2_DBG_FRAGTREE2("inserting newfrag (*%p),%d-%d in before 'this' (*%p),%d-%d\n",
+               dbg_fragtree2("inserting newfrag (*%p),%d-%d in before 'this' (*%p),%d-%d\n",
                          newfrag, newfrag->ofs, newfrag->ofs+newfrag->size, this, this->ofs, this->ofs+this->size);
        
                rb_replace_node(&this->rb, &newfrag->rb, root);
                
                if (newfrag->ofs + newfrag->size >= this->ofs+this->size) {
-                       JFFS2_DBG_FRAGTREE2("obsoleting node frag %p (%x-%x)\n", this, this->ofs, this->ofs+this->size);
+                       dbg_fragtree2("obsoleting node frag %p (%x-%x)\n", this, this->ofs, this->ofs+this->size);
                        jffs2_obsolete_node_frag(c, this);
                } else {
                        this->ofs += newfrag->size;
@@ -321,7 +321,7 @@ static int jffs2_add_frag_to_fragtree(struct jffs2_sb_info *c, struct rb_root *r
        */
        while ((this = frag_next(newfrag)) && newfrag->ofs + newfrag->size >= this->ofs + this->size) {
                /* 'this' frag is obsoleted completely. */
-               JFFS2_DBG_FRAGTREE2("obsoleting node frag %p (%x-%x) and removing from tree\n",
+               dbg_fragtree2("obsoleting node frag %p (%x-%x) and removing from tree\n",
                        this, this->ofs, this->ofs+this->size);
                rb_erase(&this->rb, root);
                jffs2_obsolete_node_frag(c, this);
@@ -361,7 +361,7 @@ int jffs2_add_full_dnode_to_inode(struct jffs2_sb_info *c, struct jffs2_inode_in
                return -ENOMEM;
        newfrag->node->frags = 1;
 
-       JFFS2_DBG_FRAGTREE("adding node %#04x-%#04x @0x%08x on flash, newfrag *%p\n",
+       dbg_fragtree("adding node %#04x-%#04x @0x%08x on flash, newfrag *%p\n",
                  fn->ofs, fn->ofs+fn->size, ref_offset(fn->raw), newfrag);
        
        ret = jffs2_add_frag_to_fragtree(c, &f->fragtree, newfrag);
@@ -410,14 +410,17 @@ static int check_node_data(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info
 
        BUG_ON(tn->csize == 0);
 
+       if (!jffs2_is_writebuffered(c))
+               goto adj_acc;
+       
        /* Calculate how many bytes were already checked */
        ofs = ref_offset(ref) + sizeof(struct jffs2_raw_inode);
-       len = ofs & (c->wbuf_pagesize - 1);
+       len = ofs % c->wbuf_pagesize;
        if (likely(len))
                len = c->wbuf_pagesize - len;
 
        if (len >= tn->csize) {
-               JFFS2_DBG_READINODE("no need to check node at %#08x, data length %u, data starts at %#08x - it has already been checked.\n",
+               dbg_readinode("no need to check node at %#08x, data length %u, data starts at %#08x - it has already been checked.\n",
                        ref_offset(ref), tn->csize, ofs);
                goto adj_acc;
        }
@@ -425,7 +428,7 @@ static int check_node_data(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info
        ofs += len;
        len = tn->csize - len;
        
-       JFFS2_DBG_READINODE("check node at %#08x, data length %u, partial CRC %#08x, correct CRC %#08x, data starts at %#08x, start checking from %#08x - %u bytes.\n",
+       dbg_readinode("check node at %#08x, data length %u, partial CRC %#08x, correct CRC %#08x, data starts at %#08x, start checking from %#08x - %u bytes.\n",
                ref_offset(ref), tn->csize, tn->partial_crc, tn->data_crc, ofs - len, ofs, len);
        
 #ifndef __ECOS
@@ -520,7 +523,7 @@ static inline int check_node(struct jffs2_sb_info *c, struct jffs2_inode_info *f
        if (ref_flags(tn->fn->raw) != REF_UNCHECKED)
                return 0;
        
-       JFFS2_DBG_FRAGTREE2("check node %#04x-%#04x, phys offs %#08x.\n",
+       dbg_fragtree2("check node %#04x-%#04x, phys offs %#08x.\n",
                tn->fn->ofs, tn->fn->ofs + tn->fn->size, ref_offset(tn->fn->raw));
 
        ret = check_node_data(c, tn);
@@ -528,7 +531,7 @@ static inline int check_node(struct jffs2_sb_info *c, struct jffs2_inode_info *f
                JFFS2_ERROR("check_node_data() returned error: %d.\n",
                        ret);
        } else if (unlikely(ret > 0)) {
-               JFFS2_DBG_FRAGTREE2("CRC error, mark it obsolete.\n");
+               dbg_fragtree2("CRC error, mark it obsolete.\n");
                jffs2_mark_node_obsolete(c, tn->fn->raw);
        }
 
@@ -544,7 +547,7 @@ static inline int check_node(struct jffs2_sb_info *c, struct jffs2_inode_info *f
 static int split_hole(struct jffs2_sb_info *c, struct rb_root *root,
                      struct jffs2_node_frag *newfrag, struct jffs2_node_frag *hole)
 {
-       JFFS2_DBG_FRAGTREE2("fragment %#04x-%#04x splits the hole %#04x-%#04x\n",
+       dbg_fragtree2("fragment %#04x-%#04x splits the hole %#04x-%#04x\n",
                newfrag->ofs, newfrag->ofs + newfrag->size, hole->ofs, hole->ofs + hole->size);
 
        if (hole->ofs == newfrag->ofs) {
@@ -558,7 +561,7 @@ static int split_hole(struct jffs2_sb_info *c, struct rb_root *root,
                         * the new node.
                         */
                        
-                       JFFS2_DBG_FRAGTREE2("insert fragment %#04x-%#04x and cut the left part of the hole\n",
+                       dbg_fragtree2("insert fragment %#04x-%#04x and cut the left part of the hole\n",
                                newfrag->ofs, newfrag->ofs + newfrag->size);
                        rb_replace_node(&hole->rb, &newfrag->rb, root);
                        
@@ -576,7 +579,7 @@ static int split_hole(struct jffs2_sb_info *c, struct rb_root *root,
                         * Ah, the new fragment is of the same size as the hole.
                         * Relace the hole by it.
                         */
-                       JFFS2_DBG_FRAGTREE2("insert fragment %#04x-%#04x and overwrite hole\n",
+                       dbg_fragtree2("insert fragment %#04x-%#04x and overwrite hole\n",
                                newfrag->ofs, newfrag->ofs + newfrag->size);
                        rb_replace_node(&hole->rb, &newfrag->rb, root);
                        jffs2_free_node_frag(hole);
@@ -598,14 +601,14 @@ static int split_hole(struct jffs2_sb_info *c, struct rb_root *root,
                }
 
                hole->size = newfrag->ofs - hole->ofs;
-               JFFS2_DBG_FRAGTREE2("left the hole %#04x-%#04x at the left and inserd fragment %#04x-%#04x\n",
+               dbg_fragtree2("left the hole %#04x-%#04x at the left and inserd fragment %#04x-%#04x\n",
                        hole->ofs, hole->ofs + hole->size, newfrag->ofs, newfrag->ofs + newfrag->size);
 
                jffs2_fragtree_insert(newfrag, hole);
                rb_insert_color(&newfrag->rb, root);
                
                if (newfrag2) {
-                       JFFS2_DBG_FRAGTREE2("left the hole %#04x-%#04x at the right\n",
+                       dbg_fragtree2("left the hole %#04x-%#04x at the right\n",
                                newfrag2->ofs, newfrag2->ofs + newfrag2->size);
                        jffs2_fragtree_insert(newfrag2, newfrag);
                        rb_insert_color(&newfrag2->rb, root);
@@ -640,12 +643,12 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode
        int err, checked = 0;
        int ref_flag;
 
-       JFFS2_DBG_FRAGTREE("insert fragment %#04x-%#04x, ver %u\n", fn_ofs, fn_ofs + fn_size, tn->version);
+       dbg_fragtree("insert fragment %#04x-%#04x, ver %u\n", fn_ofs, fn_ofs + fn_size, tn->version);
 
        /* Skip all the nodes which are completed before this one starts */
        this = jffs2_lookup_node_frag(root, fn_ofs);
        if (this)
-               JFFS2_DBG_FRAGTREE2("'this' found %#04x-%#04x (%s)\n", this->ofs, this->ofs + this->size, this->node ? "data" : "hole");
+               dbg_fragtree2("'this' found %#04x-%#04x (%s)\n", this->ofs, this->ofs + this->size, this->node ? "data" : "hole");
 
        if (this)
                lastend = this->ofs + this->size;
@@ -745,7 +748,7 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode
                                 * The new node starts at the same offset as
                                 * the hole and supersieds the hole.
                                 */
-                               JFFS2_DBG_FRAGTREE2("add the new fragment instead of hole %#04x-%#04x, refcnt %d\n",
+                               dbg_fragtree2("add the new fragment instead of hole %#04x-%#04x, refcnt %d\n",
                                        fn_ofs, fn_ofs + this->ofs + this->size - fn_ofs, fn->frags);
 
                                rb_replace_node(&this->rb, &newfrag->rb, root);
@@ -755,10 +758,10 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode
                                 * The hole becomes shorter as its right part
                                 * is supersieded by the new fragment.
                                 */
-                               JFFS2_DBG_FRAGTREE2("reduce size of hole %#04x-%#04x to %#04x-%#04x\n",
+                               dbg_fragtree2("reduce size of hole %#04x-%#04x to %#04x-%#04x\n",
                                        this->ofs, this->ofs + this->size, this->ofs, this->ofs + this->size - newfrag->size);
                                
-                               JFFS2_DBG_FRAGTREE2("add new fragment %#04x-%#04x, refcnt %d\n", fn_ofs,
+                               dbg_fragtree2("add new fragment %#04x-%#04x, refcnt %d\n", fn_ofs,
                                        fn_ofs + this->ofs + this->size - fn_ofs, fn->frags);
        
                                this->size -= newfrag->size;
@@ -771,7 +774,7 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode
                        this = rb_entry(rb_next(&newfrag->rb),
                                        struct jffs2_node_frag, rb);
 
-                       JFFS2_DBG_FRAGTREE2("switch to the next 'this' fragment: %#04x-%#04x %s\n",
+                       dbg_fragtree2("switch to the next 'this' fragment: %#04x-%#04x %s\n",
                                this->ofs, this->ofs + this->size, this->node ? "(data)" : "(hole)");
                }
 
@@ -782,7 +785,7 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode
                if (this->ofs + this->size >= fn_ofs + fn_size) {
                        /* The new node is obsolete, drop it */
                        if (fn->frags == 0) {
-                               JFFS2_DBG_FRAGTREE2("%#04x-%#04x is obsolete, mark it obsolete\n", fn_ofs, fn_ofs + fn_size);
+                               dbg_fragtree2("%#04x-%#04x is obsolete, mark it obsolete\n", fn_ofs, fn_ofs + fn_size);
                                ref_flag = REF_OBSOLETE;
                        }
                        goto out_ok;
@@ -790,13 +793,13 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode
                        struct jffs2_node_frag *new_this;
                        
                        /* 'This' node obsoletes the beginning of the new node */
-                       JFFS2_DBG_FRAGTREE2("the beginning %#04x-%#04x is obsolete\n", fn_ofs, this->ofs + this->size);
+                       dbg_fragtree2("the beginning %#04x-%#04x is obsolete\n", fn_ofs, this->ofs + this->size);
 
                        ref_flag = REF_NORMAL;
                        
                        fn_size -= this->ofs + this->size - fn_ofs;
                        fn_ofs = this->ofs + this->size;
-                       JFFS2_DBG_FRAGTREE2("now considering %#04x-%#04x\n", fn_ofs, fn_ofs + fn_size);
+                       dbg_fragtree2("now considering %#04x-%#04x\n", fn_ofs, fn_ofs + fn_size);
                        
                        new_this = rb_entry(rb_next(&this->rb), struct jffs2_node_frag, rb);
                        if (!new_this) {
@@ -816,14 +819,14 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode
                                if (unlikely(!newfrag))
                                        return -ENOMEM;
 
-                               JFFS2_DBG_FRAGTREE2("there are no more fragments, insert %#04x-%#04x\n",
+                               dbg_fragtree2("there are no more fragments, insert %#04x-%#04x\n",
                                        newfrag->ofs, newfrag->ofs + newfrag->size);
                                rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right);                      
                                rb_insert_color(&newfrag->rb, root);
                                goto out_ok;
                        } else {
                                this = new_this;
-                               JFFS2_DBG_FRAGTREE2("switch to the next 'this' fragment: %#04x-%#04x %s\n",
+                               dbg_fragtree2("switch to the next 'this' fragment: %#04x-%#04x %s\n",
                                        this->ofs, this->ofs + this->size, this->node ? "(data)" : "(hole)");
                        }
                }
@@ -833,13 +836,13 @@ out_ok:
        BUG_ON(fn->size < PAGE_CACHE_SIZE && ref_flag == REF_PRISTINE);
 
        if (ref_flag == REF_OBSOLETE) {
-               JFFS2_DBG_FRAGTREE2("the node is obsolete now\n");
+               dbg_fragtree2("the node is obsolete now\n");
                /* jffs2_mark_node_obsolete() will adjust space accounting */
                jffs2_mark_node_obsolete(c, fn->raw);
                return 1;
        }
 
-       JFFS2_DBG_FRAGTREE2("the node is \"%s\" now\n", ref_flag == REF_NORMAL ? "REF_NORMAL" : "REF_PRISTINE");
+       dbg_fragtree2("the node is \"%s\" now\n", ref_flag == REF_NORMAL ? "REF_NORMAL" : "REF_PRISTINE");
 
        /* Space accounting was adjusted at check_node_data() */
        spin_lock(&c->erase_completion_lock);
@@ -885,7 +888,7 @@ void jffs2_add_ino_cache (struct jffs2_sb_info *c, struct jffs2_inode_cache *new
        if (!new->ino)
                new->ino = ++c->highest_ino;
 
-       JFFS2_DBG_INOCACHE("add %p (ino #%u)\n", new, new->ino);
+       dbg_inocache("add %p (ino #%u)\n", new, new->ino);
 
        prev = &c->inocache_list[new->ino % INOCACHE_HASHSIZE];
 
@@ -902,7 +905,7 @@ void jffs2_del_ino_cache(struct jffs2_sb_info *c, struct jffs2_inode_cache *old)
 {
        struct jffs2_inode_cache **prev;
 
-       JFFS2_DBG_INOCACHE("del %p (ino #%u)\n", old, old->ino);
+       dbg_inocache("del %p (ino #%u)\n", old, old->ino);
        spin_lock(&c->inocache_lock);
        
        prev = &c->inocache_list[old->ino % INOCACHE_HASHSIZE];
@@ -965,7 +968,7 @@ struct jffs2_node_frag *jffs2_lookup_node_frag(struct rb_root *fragtree, uint32_
        struct jffs2_node_frag *prev = NULL;
        struct jffs2_node_frag *frag = NULL;
 
-       JFFS2_DBG_FRAGTREE2("root %p, offset %d\n", fragtree, offset);
+       dbg_fragtree2("root %p, offset %d\n", fragtree, offset);
 
        next = fragtree->rb_node;
 
@@ -988,10 +991,10 @@ struct jffs2_node_frag *jffs2_lookup_node_frag(struct rb_root *fragtree, uint32_
           and return the closest smaller one */
 
        if (prev)
-               JFFS2_DBG_FRAGTREE2("no match. Returning frag %#04x-%#04x, closest previous\n",
+               dbg_fragtree2("no match. Returning frag %#04x-%#04x, closest previous\n",
                          prev->ofs, prev->ofs+prev->size);
        else 
-               JFFS2_DBG_FRAGTREE2("returning NULL, empty fragtree\n");
+               dbg_fragtree2("returning NULL, empty fragtree\n");
        
        return prev;
 }
@@ -1006,7 +1009,7 @@ void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c)
        if (!root->rb_node)
                return;
 
-       JFFS2_DBG_FRAGTREE("killing\n");
+       dbg_fragtree("killing\n");
        
        frag = (rb_entry(root->rb_node, struct jffs2_node_frag, rb));
        while(frag) {
index 2cf576a..2c938d1 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: nodemgmt.c,v 1.126 2005/09/16 12:58:17 havasi Exp $
+ * $Id: nodemgmt.c,v 1.127 2005/09/20 15:49:12 dedekind Exp $
  *
  */
 
@@ -273,7 +273,7 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin
 
                if (jeb) {
                        reserved_size = PAD(sumsize + c->summary->sum_size + JFFS2_SUMMARY_FRAME_SIZE);
-                       JFFS2_DBG_SUMMARY("minsize=%d , jeb->free=%d ,"
+                       dbg_summary("minsize=%d , jeb->free=%d ,"
                                                "summary->size=%d , sumsize=%d\n",
                                                minsize, jeb->free_size,
                                                c->summary->sum_size, sumsize);
@@ -291,7 +291,7 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin
                        }
 
                        /* Writing out the collected summary information */
-                       JFFS2_DBG_SUMMARY("generating summary for 0x%08x.\n", jeb->offset);
+                       dbg_summary("generating summary for 0x%08x.\n", jeb->offset);
                        ret = jffs2_sum_write_sumnode(c);
 
                        if (ret)
index e026888..48ad420 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: os-linux.h,v 1.61 2005/09/07 08:34:54 havasi Exp $
+ * $Id: os-linux.h,v 1.63 2005/09/21 11:55:21 dedekind Exp $
  *
  */
 
@@ -80,8 +80,8 @@ static inline void jffs2_init_inode_info(struct jffs2_inode_info *f)
 
 #define jffs2_flash_write(c, ofs, len, retlen, buf) jffs2_flash_direct_write(c, ofs, len, retlen, buf)
 #define jffs2_flash_read(c, ofs, len, retlen, buf) ((c)->mtd->read((c)->mtd, ofs, len, retlen, buf))
-#define jffs2_flush_wbuf_pad(c) ({ (void)(c), 0; })
-#define jffs2_flush_wbuf_gc(c, i) ({ (void)(c), (void) i, 0; })
+#define jffs2_flush_wbuf_pad(c) ({ do{} while(0); (void)(c), 0; })
+#define jffs2_flush_wbuf_gc(c, i) ({ do{} while(0); (void)(c), (void) i, 0; })
 #define jffs2_write_nand_badblock(c,jeb,bad_offset) (1)
 #define jffs2_nand_flash_setup(c) (0)
 #define jffs2_nand_flash_cleanup(c) do {} while(0)
index 6f1e4a7..08f8c5e 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: readinode.c,v 1.141 2005/08/17 14:57:39 dedekind Exp $
+ * $Id: readinode.c,v 1.142 2005/09/20 14:27:34 dedekind Exp $
  *
  */
 
@@ -97,7 +97,7 @@ static struct jffs2_raw_node_ref *jffs2_first_valid_node(struct jffs2_raw_node_r
        while (ref && ref->next_in_ino) {
                if (!ref_obsolete(ref))
                        return ref;
-               JFFS2_DBG_NODEREF("node at 0x%08x is obsoleted. Ignoring.\n", ref_offset(ref));
+               dbg_noderef("node at 0x%08x is obsoleted. Ignoring.\n", ref_offset(ref));
                ref = ref->next_in_ino;
        }
        return NULL;
@@ -274,7 +274,7 @@ static inline int read_dnode(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
                        len = min_t(uint32_t, rdlen - sizeof(*rd), csize);
                        tn->partial_crc = crc32(0, buf, len);
 
-                       JFFS2_DBG_READINODE("Calculates CRC (%#08x) for %d bytes, csize %d\n", tn->partial_crc, len, csize);
+                       dbg_readinode("Calculates CRC (%#08x) for %d bytes, csize %d\n", tn->partial_crc, len, csize);
 
                        /* If we actually calculated the whole data CRC
                         * and it is wrong, drop the node. */
@@ -293,7 +293,7 @@ static inline int read_dnode(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
                         */
                        struct jffs2_eraseblock *jeb;
 
-                       JFFS2_DBG_READINODE("the node has no data.\n");
+                       dbg_readinode("the node has no data.\n");
                        jeb = &c->blocks[ref->flash_offset / c->sector_size];
                        len = ref_totlen(c, jeb, ref);
 
@@ -327,7 +327,7 @@ static inline int read_dnode(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
        else // normal case...
                tn->fn->size = je32_to_cpu(rd->dsize);
 
-       JFFS2_DBG_READINODE("dnode @%08x: ver %u, offset %#04x, dsize %#04x, csize %#04x\n",
+       dbg_readinode("dnode @%08x: ver %u, offset %#04x, dsize %#04x, csize %#04x\n",
                  ref_offset(ref), je32_to_cpu(rd->version), je32_to_cpu(rd->offset), je32_to_cpu(rd->dsize), csize);
        
        jffs2_add_tn_to_tree(tn, tnp);
@@ -424,7 +424,7 @@ static int read_more(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *ref,
                len = right_size - *rdlen;
        }
        
-       JFFS2_DBG_READINODE("read more %d bytes\n", len);
+       dbg_readinode("read more %d bytes\n", len);
 
        err = jffs2_flash_read(c, offs, len, &retlen, bufstart);
        if (err) {
@@ -461,7 +461,7 @@ static int jffs2_get_inode_nodes(struct jffs2_sb_info *c, struct jffs2_inode_inf
 
        *mctime_ver = 0;
        
-       JFFS2_DBG_READINODE("ino #%u\n", f->inocache->ino);
+       dbg_readinode("ino #%u\n", f->inocache->ino);
 
        if (jffs2_is_writebuffered(c)) {
                /*
@@ -531,7 +531,7 @@ static int jffs2_get_inode_nodes(struct jffs2_sb_info *c, struct jffs2_inode_inf
                        len = JFFS2_MIN_NODE_HEADER;
                }
 
-               JFFS2_DBG_READINODE("read %d bytes at %#08x(%d).\n", len, ref_offset(ref), ref_flags(ref));
+               dbg_readinode("read %d bytes at %#08x(%d).\n", len, ref_offset(ref), ref_flags(ref));
 
                /* FIXME: point() */
                err = jffs2_flash_read(c, ref_offset(ref), len,
@@ -614,7 +614,7 @@ static int jffs2_get_inode_nodes(struct jffs2_sb_info *c, struct jffs2_inode_inf
        *fdp = ret_fd;
        kfree(buf);
 
-       JFFS2_DBG_READINODE("nodes of inode #%u were read, the highest version is %u, latest_mctime %u, mctime_ver %u.\n",
+       dbg_readinode("nodes of inode #%u were read, the highest version is %u, latest_mctime %u, mctime_ver %u.\n",
                        f->inocache->ino, *highest_version, *latest_mctime, *mctime_ver);
        return 0;
 
@@ -639,7 +639,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
        size_t retlen;
        int ret;
 
-       JFFS2_DBG_READINODE("ino #%u nlink is %d\n", f->inocache->ino, f->inocache->nlink);
+       dbg_readinode("ino #%u nlink is %d\n", f->inocache->ino, f->inocache->nlink);
 
        /* Grab all nodes relevant to this ino */
        ret = jffs2_get_inode_nodes(c, f, &tn_list, &fd_list, &f->highest_version, &latest_mctime, &mctime_ver);
@@ -659,7 +659,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
                tn = rb_entry(rb, struct jffs2_tmp_dnode_info, rb);
                fn = tn->fn;
                ret = 1;
-               JFFS2_DBG_READINODE("consider node ver %u, phys offset "
+               dbg_readinode("consider node ver %u, phys offset "
                        "%#08x(%d), range %u-%u.\n", tn->version,
                        ref_offset(fn->raw), ref_flags(fn->raw),
                        fn->ofs, fn->ofs + fn->size);
@@ -703,7 +703,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
 
                jffs2_free_tmp_dnode_info(tn);
                if (ret) {
-                       JFFS2_DBG_READINODE("delete dnode %u-%u.\n",
+                       dbg_readinode("delete dnode %u-%u.\n",
                                fn->ofs, fn->ofs + fn->size);
                        jffs2_free_full_dnode(fn);
                }
@@ -803,7 +803,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
                        }
 
                        f->target[je32_to_cpu(latest_node->csize)] = '\0';
-                       JFFS2_DBG_READINODE("symlink's target '%s' cached\n", f->target);
+                       dbg_readinode("symlink's target '%s' cached\n", f->target);
                }
                
                /* fall through... */
@@ -851,7 +851,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
 int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, 
                        uint32_t ino, struct jffs2_raw_inode *latest_node)
 {
-       JFFS2_DBG_READINODE("read inode #%u\n", ino);
+       dbg_readinode("read inode #%u\n", ino);
 
  retry_inocache:
        spin_lock(&c->inocache_lock);
@@ -870,7 +870,7 @@ int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
                        /* If it's in either of these states, we need
                           to wait for whoever's got it to finish and
                           put it back. */
-                       JFFS2_DBG_READINODE("waiting for ino #%u in state %d\n", ino, f->inocache->state);
+                       dbg_readinode("waiting for ino #%u in state %d\n", ino, f->inocache->state);
                        sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
                        goto retry_inocache;
 
@@ -897,7 +897,7 @@ int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
                        JFFS2_ERROR("cannot allocate inocache for root inode\n");
                        return -ENOMEM;
                }
-               JFFS2_DBG_READINODE("creating inocache for root inode\n");
+               dbg_readinode("creating inocache for root inode\n");
                memset(f->inocache, 0, sizeof(struct jffs2_inode_cache));
                f->inocache->ino = f->inocache->nlink = 1;
                f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache;
index 4e60ba8..8df7456 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: scan.c,v 1.122 2005/09/07 08:34:54 havasi Exp $
+ * $Id: scan.c,v 1.124 2005/09/21 13:05:22 dedekind Exp $
  *
  */
 #include <linux/kernel.h>
@@ -429,7 +429,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
 
        noise = 10;
 
-       JFFS2_DBG_SUMMARY("no summary found in jeb 0x%08x. Apply original scan.\n",jeb->offset);
+       dbg_summary("no summary found in jeb 0x%08x. Apply original scan.\n",jeb->offset);
 
 scan_more:     
        while(ofs < jeb->offset + c->sector_size) {
@@ -684,7 +684,7 @@ scan_more:
 
        if (jffs2_sum_active()) {
                if (PAD(s->sum_size + JFFS2_SUMMARY_FRAME_SIZE) > jeb->free_size) {
-                       JFFS2_DBG_SUMMARY("There is not enough space for "
+                       dbg_summary("There is not enough space for "
                                "summary information, disabling for this jeb!\n");
                        jffs2_sum_disable_collecting(s);
                }
@@ -920,76 +920,34 @@ void jffs2_rotate_lists(struct jffs2_sb_info *c)
        x = count_list(&c->clean_list);
        if (x) {
                rotateby = pseudo_random % x;
-               D1(printk(KERN_DEBUG "Rotating clean_list by %d\n", rotateby));
-
                rotate_list((&c->clean_list), rotateby);
-
-               D1(printk(KERN_DEBUG "Erase block at front of clean_list is at %08x\n",
-                         list_entry(c->clean_list.next, struct jffs2_eraseblock, list)->offset));
-       } else {
-               D1(printk(KERN_DEBUG "Not rotating empty clean_list\n"));
        }
 
        x = count_list(&c->very_dirty_list);
        if (x) {
                rotateby = pseudo_random % x;
-               D1(printk(KERN_DEBUG "Rotating very_dirty_list by %d\n", rotateby));
-
                rotate_list((&c->very_dirty_list), rotateby);
-
-               D1(printk(KERN_DEBUG "Erase block at front of very_dirty_list is at %08x\n",
-                         list_entry(c->very_dirty_list.next, struct jffs2_eraseblock, list)->offset));
-       } else {
-               D1(printk(KERN_DEBUG "Not rotating empty very_dirty_list\n"));
        }
 
        x = count_list(&c->dirty_list);
        if (x) {
                rotateby = pseudo_random % x;
-               D1(printk(KERN_DEBUG "Rotating dirty_list by %d\n", rotateby));
-
                rotate_list((&c->dirty_list), rotateby);
-
-               D1(printk(KERN_DEBUG "Erase block at front of dirty_list is at %08x\n",
-                         list_entry(c->dirty_list.next, struct jffs2_eraseblock, list)->offset));
-       } else {
-               D1(printk(KERN_DEBUG "Not rotating empty dirty_list\n"));
        }
 
        x = count_list(&c->erasable_list);
        if (x) {
                rotateby = pseudo_random % x;
-               D1(printk(KERN_DEBUG "Rotating erasable_list by %d\n", rotateby));
-
                rotate_list((&c->erasable_list), rotateby);
-
-               D1(printk(KERN_DEBUG "Erase block at front of erasable_list is at %08x\n",
-                         list_entry(c->erasable_list.next, struct jffs2_eraseblock, list)->offset));
-       } else {
-               D1(printk(KERN_DEBUG "Not rotating empty erasable_list\n"));
        }
 
        if (c->nr_erasing_blocks) {
                rotateby = pseudo_random % c->nr_erasing_blocks;
-               D1(printk(KERN_DEBUG "Rotating erase_pending_list by %d\n", rotateby));
-
                rotate_list((&c->erase_pending_list), rotateby);
-
-               D1(printk(KERN_DEBUG "Erase block at front of erase_pending_list is at %08x\n",
-                         list_entry(c->erase_pending_list.next, struct jffs2_eraseblock, list)->offset));
-       } else {
-               D1(printk(KERN_DEBUG "Not rotating empty erase_pending_list\n"));
        }
 
        if (c->nr_free_blocks) {
                rotateby = pseudo_random % c->nr_free_blocks;
-               D1(printk(KERN_DEBUG "Rotating free_list by %d\n", rotateby));
-
                rotate_list((&c->free_list), rotateby);
-
-               D1(printk(KERN_DEBUG "Erase block at front of free_list is at %08x\n",
-                         list_entry(c->free_list.next, struct jffs2_eraseblock, list)->offset));
-       } else {
-               D1(printk(KERN_DEBUG "Not rotating empty free_list\n"));
        }
 }
index cb5dd8f..1ebc81e 100644 (file)
@@ -8,7 +8,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: summary.c,v 1.1 2005/09/07 08:34:54 havasi Exp $
+ * $Id: summary.c,v 1.3 2005/09/21 14:43:07 dedekind Exp $
  *
  */
 
@@ -38,17 +38,18 @@ int jffs2_sum_init(struct jffs2_sb_info *c)
 
        if (!c->summary->sum_buf) {
                JFFS2_WARNING("Can't allocate buffer for writing out summary information!\n");
+               kfree(c->summary);
                return -ENOMEM;
        }
 
-       JFFS2_DBG_SUMMARY("returned succesfully\n");
+       dbg_summary("returned succesfully\n");
 
        return 0;
 }
 
 void jffs2_sum_exit(struct jffs2_sb_info *c)
 {
-       JFFS2_DBG_SUMMARY("called\n");
+       dbg_summary("called\n");
 
        jffs2_sum_disable_collecting(c->summary);
 
@@ -71,13 +72,13 @@ static int jffs2_sum_add_mem(struct jffs2_summary *s, union jffs2_sum_mem *item)
                case JFFS2_NODETYPE_INODE:
                        s->sum_size += JFFS2_SUMMARY_INODE_SIZE;
                        s->sum_num++;
-                       JFFS2_DBG_SUMMARY("inode (%u) added to summary\n",
+                       dbg_summary("inode (%u) added to summary\n",
                                                je32_to_cpu(item->i.inode));
                        break;
                case JFFS2_NODETYPE_DIRENT:
                        s->sum_size += JFFS2_SUMMARY_DIRENT_SIZE(item->d.nsize);
                        s->sum_num++;
-                       JFFS2_DBG_SUMMARY("dirent (%u) added to summary\n",
+                       dbg_summary("dirent (%u) added to summary\n",
                                                je32_to_cpu(item->d.ino));
                        break;
                default:
@@ -93,7 +94,7 @@ static int jffs2_sum_add_mem(struct jffs2_summary *s, union jffs2_sum_mem *item)
 
 int jffs2_sum_add_padding_mem(struct jffs2_summary *s, uint32_t size)
 {
-       JFFS2_DBG_SUMMARY("called with %u\n", size);
+       dbg_summary("called with %u\n", size);
        s->sum_padded += size;
        return 0;
 }
@@ -147,7 +148,7 @@ static void jffs2_sum_clean_collected(struct jffs2_summary *s)
        union jffs2_sum_mem *temp;
 
        if (!s->sum_list_head) {
-               JFFS2_DBG_SUMMARY("already empty\n");
+               dbg_summary("already empty\n");
        }
        while (s->sum_list_head) {
                temp = s->sum_list_head;
@@ -161,14 +162,14 @@ static void jffs2_sum_clean_collected(struct jffs2_summary *s)
 
 void jffs2_sum_reset_collected(struct jffs2_summary *s)
 {
-       JFFS2_DBG_SUMMARY("called\n");
+       dbg_summary("called\n");
        jffs2_sum_clean_collected(s);
        s->sum_size = 0;
 }
 
 void jffs2_sum_disable_collecting(struct jffs2_summary *s)
 {
-       JFFS2_DBG_SUMMARY("called\n");
+       dbg_summary("called\n");
        jffs2_sum_clean_collected(s);
        s->sum_size = JFFS2_SUMMARY_NOSUM_SIZE;
 }
@@ -182,7 +183,7 @@ int jffs2_sum_is_disabled(struct jffs2_summary *s)
 
 void jffs2_sum_move_collected(struct jffs2_sb_info *c, struct jffs2_summary *s)
 {
-       JFFS2_DBG_SUMMARY("oldsize=0x%x oldnum=%u => newsize=0x%x newnum=%u\n",
+       dbg_summary("oldsize=0x%x oldnum=%u => newsize=0x%x newnum=%u\n",
                                c->summary->sum_size, c->summary->sum_num,
                                s->sum_size, s->sum_num);
 
@@ -260,16 +261,16 @@ int jffs2_sum_add_kvec(struct jffs2_sb_info *c, const struct kvec *invecs,
                }
 
                case JFFS2_NODETYPE_PADDING:
-                       JFFS2_DBG_SUMMARY("node PADDING\n");
+                       dbg_summary("node PADDING\n");
                        c->summary->sum_padded += je32_to_cpu(node->u.totlen);
                        break;
 
                case JFFS2_NODETYPE_CLEANMARKER:
-                       JFFS2_DBG_SUMMARY("node CLEANMARKER\n");
+                       dbg_summary("node CLEANMARKER\n");
                        break;
 
                case JFFS2_NODETYPE_SUMMARY:
-                       JFFS2_DBG_SUMMARY("node SUMMARY\n");
+                       dbg_summary("node SUMMARY\n");
                        break;
 
                default:
@@ -302,7 +303,7 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras
        sp = summary->sum;
 
        for (i=0; i<je32_to_cpu(summary->sum_num); i++) {
-               JFFS2_DBG_SUMMARY("processing summary index %d\n", i);
+               dbg_summary("processing summary index %d\n", i);
 
                switch (je16_to_cpu(((struct jffs2_sum_unknown_flash *)sp)->nodetype)) {
                        case JFFS2_NODETYPE_INODE: {
@@ -311,7 +312,7 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras
 
                                ino = je32_to_cpu(spi->inode);
 
-                               JFFS2_DBG_SUMMARY("Inode at 0x%08x\n",
+                               dbg_summary("Inode at 0x%08x\n",
                                                        jeb->offset + je32_to_cpu(spi->offset));
 
                                raw = jffs2_alloc_raw_node_ref();
@@ -353,7 +354,7 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras
                                struct jffs2_sum_dirent_flash *spd;
                                spd = sp;
 
-                               JFFS2_DBG_SUMMARY("Dirent at 0x%08x\n",
+                               dbg_summary("Dirent at 0x%08x\n",
                                                        jeb->offset + je32_to_cpu(spd->offset));
 
                                fd = jffs2_alloc_full_dirent(spd->nsize+1);
@@ -434,7 +435,7 @@ int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb
        sumsize = c->sector_size - ofs;
        ofs += jeb->offset;
 
-       JFFS2_DBG_SUMMARY("summary found for 0x%08x at 0x%08x (0x%x bytes)\n",
+       dbg_summary("summary found for 0x%08x at 0x%08x (0x%x bytes)\n",
                                jeb->offset, ofs, sumsize);
 
        summary = kmalloc(sumsize, GFP_KERNEL);
@@ -457,40 +458,40 @@ int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb
        crc = crc32(0, &crcnode, sizeof(crcnode)-4);
 
        if (je32_to_cpu(summary->hdr_crc) != crc) {
-               JFFS2_DBG_SUMMARY("Summary node header is corrupt (bad CRC or "
+               dbg_summary("Summary node header is corrupt (bad CRC or "
                                "no summary at all)\n");
                goto crc_err;
        }
 
        if (je32_to_cpu(summary->totlen) != sumsize) {
-               JFFS2_DBG_SUMMARY("Summary node is corrupt (wrong erasesize?)\n");
+               dbg_summary("Summary node is corrupt (wrong erasesize?)\n");
                goto crc_err;
        }
 
        crc = crc32(0, summary, sizeof(struct jffs2_summary_node)-8);
 
        if (je32_to_cpu(summary->node_crc) != crc) {
-               JFFS2_DBG_SUMMARY("Summary node is corrupt (bad CRC)\n");
+               dbg_summary("Summary node is corrupt (bad CRC)\n");
                goto crc_err;
        }
 
        crc = crc32(0, summary->sum, sumsize - sizeof(struct jffs2_summary_node));
 
        if (je32_to_cpu(summary->sum_crc) != crc) {
-               JFFS2_DBG_SUMMARY("Summary node data is corrupt (bad CRC)\n");
+               dbg_summary("Summary node data is corrupt (bad CRC)\n");
                goto crc_err;
        }
 
        if ( je32_to_cpu(summary->cln_mkr) ) {
 
-               JFFS2_DBG_SUMMARY("Summary : CLEANMARKER node \n");
+               dbg_summary("Summary : CLEANMARKER node \n");
 
                if (je32_to_cpu(summary->cln_mkr) != c->cleanmarker_size) {
-                       JFFS2_DBG_SUMMARY("CLEANMARKER node has totlen 0x%x != normal 0x%x\n",
+                       dbg_summary("CLEANMARKER node has totlen 0x%x != normal 0x%x\n",
                                je32_to_cpu(summary->cln_mkr), c->cleanmarker_size);
                        UNCHECKED_SPACE(PAD(je32_to_cpu(summary->cln_mkr)));
                } else if (jeb->first_node) {
-                       JFFS2_DBG_SUMMARY("CLEANMARKER node not first node in block "
+                       dbg_summary("CLEANMARKER node not first node in block "
                                        "(0x%08x)\n", jeb->offset);
                        UNCHECKED_SPACE(PAD(je32_to_cpu(summary->cln_mkr)));
                } else {
@@ -644,7 +645,7 @@ static int jffs2_sum_write_data(struct jffs2_sb_info *c, struct jffs2_eraseblock
        vecs[1].iov_base = c->summary->sum_buf;
        vecs[1].iov_len = datasize;
 
-       JFFS2_DBG_SUMMARY("JFFS2: writing out data to flash to pos : 0x%08x\n",
+       dbg_summary("JFFS2: writing out data to flash to pos : 0x%08x\n",
                        jeb->offset + c->sector_size - jeb->free_size);
 
        spin_unlock(&c->erase_completion_lock);
@@ -674,7 +675,7 @@ int jffs2_sum_write_sumnode(struct jffs2_sb_info *c)
        int datasize, infosize, padsize, ret;
        struct jffs2_eraseblock *jeb;
 
-       JFFS2_DBG_SUMMARY("called\n");
+       dbg_summary("called\n");
 
        jeb = c->nextblock;
 
index 86860db..11e05bc 100644 (file)
@@ -9,7 +9,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: wbuf.c,v 1.98 2005/09/07 08:34:55 havasi Exp $
+ * $Id: wbuf.c,v 1.99 2005/09/21 16:11:04 dedekind Exp $
  *
  */
 
@@ -33,9 +33,6 @@ static unsigned char *brokenbuf;
 /* max. erase failures before we mark a block bad */
 #define MAX_ERASE_FAILURES     2
 
-/* two seconds timeout for timed wbuf-flushing */
-#define WBUF_FLUSH_TIMEOUT     2 * HZ
-
 struct jffs2_inodirty {
        uint32_t ino;
        struct jffs2_inodirty *next;
index 5087612..fdc445b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: jffs2_fs_sb.h,v 1.53 2005/09/07 08:34:56 havasi Exp $ */
+/* $Id: jffs2_fs_sb.h,v 1.54 2005/09/21 13:37:34 dedekind Exp $ */
 
 #ifndef _JFFS2_FS_SB
 #define _JFFS2_FS_SB
@@ -95,12 +95,13 @@ struct jffs2_sb_info {
           to an obsoleted node. I don't like this. Alternatives welcomed. */
        struct semaphore erase_free_sem;
 
+       uint32_t wbuf_pagesize; /* 0 for NOR and other flashes with no wbuf */
+       
 #ifdef CONFIG_JFFS2_FS_WRITEBUFFER
        /* Write-behind buffer for NAND flash */
        unsigned char *wbuf;
        uint32_t wbuf_ofs;
        uint32_t wbuf_len;
-       uint32_t wbuf_pagesize;
        struct jffs2_inodirty *wbuf_inodes;
 
        struct rw_semaphore wbuf_sem;   /* Protects the write buffer */