diff options
| author | Artem B. Bityutskiy <dedekind@infradead.org> | 2005-09-22 07:25:00 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@mtd.linutronix.de> | 2005-11-06 16:20:33 -0500 |
| commit | 733802d974e5af42acb7cd61b16c0ce6dd03b7ed (patch) | |
| tree | 56f77d78d9a2df474bb1686f5d060ee1e84a4d68 /fs/jffs2 | |
| parent | b523b3bac3a745fefd6f604082f2ffa09b808e5e (diff) | |
[JFFS2] Debug code simplification, update TODO
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>
Diffstat (limited to 'fs/jffs2')
| -rw-r--r-- | fs/jffs2/TODO | 38 | ||||
| -rw-r--r-- | fs/jffs2/build.c | 112 | ||||
| -rw-r--r-- | fs/jffs2/debug.c | 3 | ||||
| -rw-r--r-- | fs/jffs2/debug.h | 50 | ||||
| -rw-r--r-- | fs/jffs2/erase.c | 2 | ||||
| -rw-r--r-- | fs/jffs2/malloc.c | 34 | ||||
| -rw-r--r-- | fs/jffs2/nodelist.c | 107 | ||||
| -rw-r--r-- | fs/jffs2/nodemgmt.c | 6 | ||||
| -rw-r--r-- | fs/jffs2/os-linux.h | 6 | ||||
| -rw-r--r-- | fs/jffs2/readinode.c | 32 | ||||
| -rw-r--r-- | fs/jffs2/scan.c | 48 | ||||
| -rw-r--r-- | fs/jffs2/summary.c | 53 | ||||
| -rw-r--r-- | fs/jffs2/wbuf.c | 5 |
13 files changed, 232 insertions, 264 deletions
diff --git a/fs/jffs2/TODO b/fs/jffs2/TODO index 2bff82fd22..d0e23b26fa 100644 --- a/fs/jffs2/TODO +++ b/fs/jffs2/TODO | |||
| @@ -1,5 +1,11 @@ | |||
| 1 | $Id: TODO,v 1.10 2002/09/09 16:31:21 dwmw2 Exp $ | 1 | $Id: TODO,v 1.18 2005/09/22 11:24:56 dedekind Exp $ |
| 2 | 2 | ||
| 3 | - support asynchronous operation -- add a per-fs 'reserved_space' count, | ||
| 4 | let each outstanding write reserve the _maximum_ amount of physical | ||
| 5 | space it could take. Let GC flush the outstanding writes because the | ||
| 6 | reservations will necessarily be pessimistic. With this we could even | ||
| 7 | do shared writable mmap, if we can have a fs hook for do_wp_page() to | ||
| 8 | make the reservation. | ||
| 3 | - disable compression in commit_write()? | 9 | - disable compression in commit_write()? |
| 4 | - fine-tune the allocation / GC thresholds | 10 | - fine-tune the allocation / GC thresholds |
| 5 | - chattr support - turning on/off and tuning compression per-inode | 11 | - 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 $ | |||
| 11 | - test, test, test | 17 | - test, test, test |
| 12 | 18 | ||
| 13 | - NAND flash support: | 19 | - NAND flash support: |
| 14 | - flush_wbuf using GC to fill it, don't just pad. | 20 | - almost done :) |
| 15 | - Deal with write errors. Data don't get lost - we just have to write | 21 | - use bad block check instead of the hardwired byte check |
| 16 | the affected node(s) out again somewhere else. | ||
| 17 | - make fsync flush only if actually required | ||
| 18 | - make sys_sync() work. | ||
| 19 | - reboot notifier | ||
| 20 | - timed flush of old wbuf | ||
| 21 | - fix magical second arg of jffs2_flush_wbuf(). Split into two or more functions instead. | ||
| 22 | |||
| 23 | 22 | ||
| 24 | - Optimisations: | 23 | - Optimisations: |
| 25 | - Stop GC from decompressing and immediately recompressing nodes which could | 24 | - Split writes so they go to two separate blocks rather than just c->nextblock. |
| 26 | just be copied intact. (We now keep track of REF_PRISTINE flag. Easy now.) | 25 | By writing _new_ nodes to one block, and garbage-collected REF_PRISTINE |
| 27 | - Furthermore, in the case where it could be copied intact we don't even need | 26 | nodes to a different one, we can separate clean nodes from those which |
| 28 | to call iget() for it -- if we use (raw_node_raw->flash_offset & 2) as a flag | 27 | are likely to become dirty, and end up with blocks which are each far |
| 29 | to show a node can be copied intact and it's _not_ in icache, we could just do | 28 | closer to 100% or 0% clean, hence speeding up later GC progress dramatically. |
| 30 | it, fix up the next_in_ino list and move on. We would need a way to find out | ||
| 31 | _whether_ it's in icache though -- if it's in icache we also need to do the | ||
| 32 | fragment lists, etc. P'raps a flag or pointer in the jffs2_inode_cache could | ||
| 33 | help. (We have half of this now.) | ||
| 34 | - Stop keeping name in-core with struct jffs2_full_dirent. If we keep the hash in | 29 | - Stop keeping name in-core with struct jffs2_full_dirent. If we keep the hash in |
| 35 | the full dirent, we only need to go to the flash in lookup() when we think we've | 30 | the full dirent, we only need to go to the flash in lookup() when we think we've |
| 36 | got a match, and in readdir(). | 31 | got a match, and in readdir(). |
| @@ -38,3 +33,8 @@ $Id: TODO,v 1.10 2002/09/09 16:31:21 dwmw2 Exp $ | |||
| 38 | - Remove totlen from jffs2_raw_node_ref? Need to have totlen passed into | 33 | - Remove totlen from jffs2_raw_node_ref? Need to have totlen passed into |
| 39 | jffs2_mark_node_obsolete(). Can all callers work it out? | 34 | jffs2_mark_node_obsolete(). Can all callers work it out? |
| 40 | - Remove size from jffs2_raw_node_frag. | 35 | - Remove size from jffs2_raw_node_frag. |
| 36 | |||
| 37 | dedekind: | ||
| 38 | 1. __jffs2_flush_wbuf() has a strange 'pad' parameter. Eliminate. | ||
| 39 | 2. get_sb()->build_fs()->scan() path... Why get_sb() removes scan()'s crap in | ||
| 40 | case of failure? scan() does not clean everything. Fix. | ||
diff --git a/fs/jffs2/build.c b/fs/jffs2/build.c index f2cf562ebd..ac393b3d6e 100644 --- a/fs/jffs2/build.c +++ b/fs/jffs2/build.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: build.c,v 1.79 2005/09/07 11:21:57 havasi Exp $ | 10 | * $Id: build.c,v 1.83 2005/09/21 15:52:33 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| @@ -18,7 +18,8 @@ | |||
| 18 | #include <linux/mtd/mtd.h> | 18 | #include <linux/mtd/mtd.h> |
| 19 | #include "nodelist.h" | 19 | #include "nodelist.h" |
| 20 | 20 | ||
| 21 | static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *, struct jffs2_inode_cache *, struct jffs2_full_dirent **); | 21 | static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *, |
| 22 | struct jffs2_inode_cache *, struct jffs2_full_dirent **); | ||
| 22 | 23 | ||
| 23 | static inline struct jffs2_inode_cache * | 24 | static inline struct jffs2_inode_cache * |
| 24 | first_inode_chain(int *i, struct jffs2_sb_info *c) | 25 | 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) | |||
| 46 | ic = next_inode(&i, ic, (c))) | 47 | ic = next_inode(&i, ic, (c))) |
| 47 | 48 | ||
| 48 | 49 | ||
| 49 | static inline void jffs2_build_inode_pass1(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic) | 50 | static inline void jffs2_build_inode_pass1(struct jffs2_sb_info *c, |
| 51 | struct jffs2_inode_cache *ic) | ||
| 50 | { | 52 | { |
| 51 | struct jffs2_full_dirent *fd; | 53 | struct jffs2_full_dirent *fd; |
| 52 | 54 | ||
| 53 | D1(printk(KERN_DEBUG "jffs2_build_inode building directory inode #%u\n", ic->ino)); | 55 | dbg_fsbuild("building directory inode #%u\n", ic->ino); |
| 54 | 56 | ||
| 55 | /* For each child, increase nlink */ | 57 | /* For each child, increase nlink */ |
| 56 | for(fd = ic->scan_dents; fd; fd = fd->next) { | 58 | 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 | |||
| 58 | if (!fd->ino) | 60 | if (!fd->ino) |
| 59 | continue; | 61 | continue; |
| 60 | 62 | ||
| 61 | /* XXX: Can get high latency here with huge directories */ | 63 | /* we can get high latency here with huge directories */ |
| 62 | 64 | ||
| 63 | child_ic = jffs2_get_ino_cache(c, fd->ino); | 65 | child_ic = jffs2_get_ino_cache(c, fd->ino); |
| 64 | if (!child_ic) { | 66 | if (!child_ic) { |
| 65 | printk(KERN_NOTICE "Eep. Child \"%s\" (ino #%u) of dir ino #%u doesn't exist!\n", | 67 | dbg_fsbuild("child \"%s\" (ino #%u) of dir ino #%u doesn't exist!\n", |
| 66 | fd->name, fd->ino, ic->ino); | 68 | fd->name, fd->ino, ic->ino); |
| 67 | jffs2_mark_node_obsolete(c, fd->raw); | 69 | jffs2_mark_node_obsolete(c, fd->raw); |
| 68 | continue; | 70 | continue; |
| 69 | } | 71 | } |
| 70 | 72 | ||
| 71 | if (child_ic->nlink++ && fd->type == DT_DIR) { | 73 | if (child_ic->nlink++ && fd->type == DT_DIR) { |
| 72 | 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); | 74 | JFFS2_ERROR("child dir \"%s\" (ino #%u) of dir ino #%u appears to be a hard link\n", |
| 73 | if (fd->ino == 1 && ic->ino == 1) { | 75 | fd->name, fd->ino, ic->ino); |
| 74 | printk(KERN_NOTICE "This is mostly harmless, and probably caused by creating a JFFS2 image\n"); | 76 | /* TODO: What do we do about it? */ |
| 75 | printk(KERN_NOTICE "using a buggy version of mkfs.jffs2. Use at least v1.17.\n"); | ||
| 76 | } | ||
| 77 | /* What do we do about it? */ | ||
| 78 | } | 77 | } |
| 79 | D1(printk(KERN_DEBUG "Increased nlink for child \"%s\" (ino #%u)\n", fd->name, fd->ino)); | 78 | dbg_fsbuild("increased nlink for child \"%s\" (ino #%u)\n", fd->name, fd->ino); |
| 80 | /* Can't free them. We might need them in pass 2 */ | 79 | /* Can't free scan_dents so far. We might need them in pass 2 */ |
| 81 | } | 80 | } |
| 82 | } | 81 | } |
| 83 | 82 | ||
| @@ -94,6 +93,8 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c) | |||
| 94 | struct jffs2_full_dirent *fd; | 93 | struct jffs2_full_dirent *fd; |
| 95 | struct jffs2_full_dirent *dead_fds = NULL; | 94 | struct jffs2_full_dirent *dead_fds = NULL; |
| 96 | 95 | ||
| 96 | dbg_fsbuild("build FS data structures\n"); | ||
| 97 | |||
| 97 | /* First, scan the medium and build all the inode caches with | 98 | /* First, scan the medium and build all the inode caches with |
| 98 | lists of physical nodes */ | 99 | lists of physical nodes */ |
| 99 | 100 | ||
| @@ -103,33 +104,29 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c) | |||
| 103 | if (ret) | 104 | if (ret) |
| 104 | goto exit; | 105 | goto exit; |
| 105 | 106 | ||
| 106 | D1(printk(KERN_DEBUG "Scanned flash completely\n")); | 107 | dbg_fsbuild("scanned flash completely\n"); |
| 107 | jffs2_dbg_dump_block_lists_nolock(c); | 108 | jffs2_dbg_dump_block_lists_nolock(c); |
| 108 | 109 | ||
| 110 | dbg_fsbuild("pass 1 starting\n"); | ||
| 109 | c->flags |= JFFS2_SB_FLAG_BUILDING; | 111 | c->flags |= JFFS2_SB_FLAG_BUILDING; |
| 110 | /* Now scan the directory tree, increasing nlink according to every dirent found. */ | 112 | /* Now scan the directory tree, increasing nlink according to every dirent found. */ |
| 111 | for_each_inode(i, c, ic) { | 113 | for_each_inode(i, c, ic) { |
| 112 | D1(printk(KERN_DEBUG "Pass 1: ino #%u\n", ic->ino)); | ||
| 113 | |||
| 114 | D1(BUG_ON(ic->ino > c->highest_ino)); | ||
| 115 | |||
| 116 | if (ic->scan_dents) { | 114 | if (ic->scan_dents) { |
| 117 | jffs2_build_inode_pass1(c, ic); | 115 | jffs2_build_inode_pass1(c, ic); |
| 118 | cond_resched(); | 116 | cond_resched(); |
| 119 | } | 117 | } |
| 120 | } | 118 | } |
| 121 | 119 | ||
| 122 | D1(printk(KERN_DEBUG "Pass 1 complete\n")); | 120 | dbg_fsbuild("pass 1 complete\n"); |
| 123 | 121 | ||
| 124 | /* Next, scan for inodes with nlink == 0 and remove them. If | 122 | /* Next, scan for inodes with nlink == 0 and remove them. If |
| 125 | they were directories, then decrement the nlink of their | 123 | they were directories, then decrement the nlink of their |
| 126 | children too, and repeat the scan. As that's going to be | 124 | children too, and repeat the scan. As that's going to be |
| 127 | a fairly uncommon occurrence, it's not so evil to do it this | 125 | a fairly uncommon occurrence, it's not so evil to do it this |
| 128 | way. Recursion bad. */ | 126 | way. Recursion bad. */ |
| 129 | D1(printk(KERN_DEBUG "Pass 2 starting\n")); | 127 | dbg_fsbuild("pass 2 starting\n"); |
| 130 | 128 | ||
| 131 | for_each_inode(i, c, ic) { | 129 | for_each_inode(i, c, ic) { |
| 132 | D1(printk(KERN_DEBUG "Pass 2: ino #%u, nlink %d, ic %p, nodes %p\n", ic->ino, ic->nlink, ic, ic->nodes)); | ||
| 133 | if (ic->nlink) | 130 | if (ic->nlink) |
| 134 | continue; | 131 | continue; |
| 135 | 132 | ||
| @@ -137,26 +134,24 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c) | |||
| 137 | cond_resched(); | 134 | cond_resched(); |
| 138 | } | 135 | } |
| 139 | 136 | ||
| 140 | D1(printk(KERN_DEBUG "Pass 2a starting\n")); | 137 | dbg_fsbuild("pass 2a starting\n"); |
| 141 | 138 | ||
| 142 | while (dead_fds) { | 139 | while (dead_fds) { |
| 143 | fd = dead_fds; | 140 | fd = dead_fds; |
| 144 | dead_fds = fd->next; | 141 | dead_fds = fd->next; |
| 145 | 142 | ||
| 146 | ic = jffs2_get_ino_cache(c, fd->ino); | 143 | ic = jffs2_get_ino_cache(c, fd->ino); |
| 147 | D1(printk(KERN_DEBUG "Removing dead_fd ino #%u (\"%s\"), ic at %p\n", fd->ino, fd->name, ic)); | ||
| 148 | 144 | ||
| 149 | if (ic) | 145 | if (ic) |
| 150 | jffs2_build_remove_unlinked_inode(c, ic, &dead_fds); | 146 | jffs2_build_remove_unlinked_inode(c, ic, &dead_fds); |
| 151 | jffs2_free_full_dirent(fd); | 147 | jffs2_free_full_dirent(fd); |
| 152 | } | 148 | } |
| 153 | 149 | ||
| 154 | D1(printk(KERN_DEBUG "Pass 2 complete\n")); | 150 | dbg_fsbuild("pass 2a complete\n"); |
| 151 | dbg_fsbuild("freeing temporary data structures\n"); | ||
| 155 | 152 | ||
| 156 | /* Finally, we can scan again and free the dirent structs */ | 153 | /* Finally, we can scan again and free the dirent structs */ |
| 157 | for_each_inode(i, c, ic) { | 154 | for_each_inode(i, c, ic) { |
| 158 | D1(printk(KERN_DEBUG "Pass 3: ino #%u, ic %p, nodes %p\n", ic->ino, ic, ic->nodes)); | ||
| 159 | |||
| 160 | while(ic->scan_dents) { | 155 | while(ic->scan_dents) { |
| 161 | fd = ic->scan_dents; | 156 | fd = ic->scan_dents; |
| 162 | ic->scan_dents = fd->next; | 157 | ic->scan_dents = fd->next; |
| @@ -167,8 +162,7 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c) | |||
| 167 | } | 162 | } |
| 168 | c->flags &= ~JFFS2_SB_FLAG_BUILDING; | 163 | c->flags &= ~JFFS2_SB_FLAG_BUILDING; |
| 169 | 164 | ||
| 170 | D1(printk(KERN_DEBUG "Pass 3 complete\n")); | 165 | dbg_fsbuild("FS build complete\n"); |
| 171 | jffs2_dbg_dump_block_lists_nolock(c); | ||
| 172 | 166 | ||
| 173 | /* Rotate the lists by some number to ensure wear levelling */ | 167 | /* Rotate the lists by some number to ensure wear levelling */ |
| 174 | jffs2_rotate_lists(c); | 168 | jffs2_rotate_lists(c); |
| @@ -189,24 +183,26 @@ exit: | |||
| 189 | return ret; | 183 | return ret; |
| 190 | } | 184 | } |
| 191 | 185 | ||
| 192 | static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic, struct jffs2_full_dirent **dead_fds) | 186 | static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, |
| 187 | struct jffs2_inode_cache *ic, | ||
| 188 | struct jffs2_full_dirent **dead_fds) | ||
| 193 | { | 189 | { |
| 194 | struct jffs2_raw_node_ref *raw; | 190 | struct jffs2_raw_node_ref *raw; |
| 195 | struct jffs2_full_dirent *fd; | 191 | struct jffs2_full_dirent *fd; |
| 196 | 192 | ||
| 197 | D1(printk(KERN_DEBUG "JFFS2: Removing ino #%u with nlink == zero.\n", ic->ino)); | 193 | dbg_fsbuild("removing ino #%u with nlink == zero.\n", ic->ino); |
| 198 | 194 | ||
| 199 | raw = ic->nodes; | 195 | raw = ic->nodes; |
| 200 | while (raw != (void *)ic) { | 196 | while (raw != (void *)ic) { |
| 201 | struct jffs2_raw_node_ref *next = raw->next_in_ino; | 197 | struct jffs2_raw_node_ref *next = raw->next_in_ino; |
| 202 | D1(printk(KERN_DEBUG "obsoleting node at 0x%08x\n", ref_offset(raw))); | 198 | dbg_fsbuild("obsoleting node at 0x%08x\n", ref_offset(raw)); |
| 203 | jffs2_mark_node_obsolete(c, raw); | 199 | jffs2_mark_node_obsolete(c, raw); |
| 204 | raw = next; | 200 | raw = next; |
| 205 | } | 201 | } |
| 206 | 202 | ||
| 207 | if (ic->scan_dents) { | 203 | if (ic->scan_dents) { |
| 208 | int whinged = 0; | 204 | int whinged = 0; |
| 209 | D1(printk(KERN_DEBUG "Inode #%u was a directory which may have children...\n", ic->ino)); | 205 | dbg_fsbuild("inode #%u was a directory which may have children...\n", ic->ino); |
| 210 | 206 | ||
| 211 | while(ic->scan_dents) { | 207 | while(ic->scan_dents) { |
| 212 | struct jffs2_inode_cache *child_ic; | 208 | struct jffs2_inode_cache *child_ic; |
| @@ -216,21 +212,19 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, struct jf | |||
| 216 | 212 | ||
| 217 | if (!fd->ino) { | 213 | if (!fd->ino) { |
| 218 | /* It's a deletion dirent. Ignore it */ | 214 | /* It's a deletion dirent. Ignore it */ |
| 219 | D1(printk(KERN_DEBUG "Child \"%s\" is a deletion dirent, skipping...\n", fd->name)); | 215 | dbg_fsbuild("child \"%s\" is a deletion dirent, skipping...\n", fd->name); |
| 220 | jffs2_free_full_dirent(fd); | 216 | jffs2_free_full_dirent(fd); |
| 221 | continue; | 217 | continue; |
| 222 | } | 218 | } |
| 223 | if (!whinged) { | 219 | if (!whinged) |
| 224 | whinged = 1; | 220 | whinged = 1; |
| 225 | printk(KERN_NOTICE "Inode #%u was a directory with children - removing those too...\n", ic->ino); | ||
| 226 | } | ||
| 227 | 221 | ||
| 228 | D1(printk(KERN_DEBUG "Removing child \"%s\", ino #%u\n", | 222 | dbg_fsbuild("removing child \"%s\", ino #%u\n", fd->name, fd->ino); |
| 229 | fd->name, fd->ino)); | ||
| 230 | 223 | ||
| 231 | child_ic = jffs2_get_ino_cache(c, fd->ino); | 224 | child_ic = jffs2_get_ino_cache(c, fd->ino); |
| 232 | if (!child_ic) { | 225 | if (!child_ic) { |
| 233 | printk(KERN_NOTICE "Cannot remove child \"%s\", ino #%u, because it doesn't exist\n", fd->name, fd->ino); | 226 | dbg_fsbuild("cannot remove child \"%s\", ino #%u, because it doesn't exist\n", |
| 227 | fd->name, fd->ino); | ||
| 234 | jffs2_free_full_dirent(fd); | 228 | jffs2_free_full_dirent(fd); |
| 235 | continue; | 229 | continue; |
| 236 | } | 230 | } |
| @@ -241,13 +235,13 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, struct jf | |||
| 241 | child_ic->nlink--; | 235 | child_ic->nlink--; |
| 242 | 236 | ||
| 243 | if (!child_ic->nlink) { | 237 | if (!child_ic->nlink) { |
| 244 | D1(printk(KERN_DEBUG "Inode #%u (\"%s\") has now got zero nlink. Adding to dead_fds list.\n", | 238 | dbg_fsbuild("inode #%u (\"%s\") has now got zero nlink, adding to dead_fds list.\n", |
| 245 | fd->ino, fd->name)); | 239 | fd->ino, fd->name); |
| 246 | fd->next = *dead_fds; | 240 | fd->next = *dead_fds; |
| 247 | *dead_fds = fd; | 241 | *dead_fds = fd; |
| 248 | } else { | 242 | } else { |
| 249 | D1(printk(KERN_DEBUG "Inode #%u (\"%s\") has now got nlink %d. Ignoring.\n", | 243 | dbg_fsbuild("inode #%u (\"%s\") has now got nlink %d. Ignoring.\n", |
| 250 | fd->ino, fd->name, child_ic->nlink)); | 244 | fd->ino, fd->name, child_ic->nlink); |
| 251 | jffs2_free_full_dirent(fd); | 245 | jffs2_free_full_dirent(fd); |
| 252 | } | 246 | } |
| 253 | } | 247 | } |
| @@ -295,20 +289,20 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c) | |||
| 295 | trying to GC to make more space. It'll be a fruitless task */ | 289 | trying to GC to make more space. It'll be a fruitless task */ |
| 296 | c->nospc_dirty_size = c->sector_size + (c->flash_size / 100); | 290 | c->nospc_dirty_size = c->sector_size + (c->flash_size / 100); |
| 297 | 291 | ||
| 298 | D1(printk(KERN_DEBUG "JFFS2 trigger levels (size %d KiB, block size %d KiB, %d blocks)\n", | 292 | dbg_fsbuild("JFFS2 trigger levels (size %d KiB, block size %d KiB, %d blocks)\n", |
| 299 | c->flash_size / 1024, c->sector_size / 1024, c->nr_blocks)); | 293 | c->flash_size / 1024, c->sector_size / 1024, c->nr_blocks); |
| 300 | D1(printk(KERN_DEBUG "Blocks required to allow deletion: %d (%d KiB)\n", | 294 | dbg_fsbuild("Blocks required to allow deletion: %d (%d KiB)\n", |
| 301 | c->resv_blocks_deletion, c->resv_blocks_deletion*c->sector_size/1024)); | 295 | c->resv_blocks_deletion, c->resv_blocks_deletion*c->sector_size/1024); |
| 302 | D1(printk(KERN_DEBUG "Blocks required to allow writes: %d (%d KiB)\n", | 296 | dbg_fsbuild("Blocks required to allow writes: %d (%d KiB)\n", |
| 303 | c->resv_blocks_write, c->resv_blocks_write*c->sector_size/1024)); | 297 | c->resv_blocks_write, c->resv_blocks_write*c->sector_size/1024); |
| 304 | D1(printk(KERN_DEBUG "Blocks required to quiesce GC thread: %d (%d KiB)\n", | 298 | dbg_fsbuild("Blocks required to quiesce GC thread: %d (%d KiB)\n", |
| 305 | c->resv_blocks_gctrigger, c->resv_blocks_gctrigger*c->sector_size/1024)); | 299 | c->resv_blocks_gctrigger, c->resv_blocks_gctrigger*c->sector_size/1024); |
| 306 | D1(printk(KERN_DEBUG "Blocks required to allow GC merges: %d (%d KiB)\n", | 300 | dbg_fsbuild("Blocks required to allow GC merges: %d (%d KiB)\n", |
| 307 | c->resv_blocks_gcmerge, c->resv_blocks_gcmerge*c->sector_size/1024)); | 301 | c->resv_blocks_gcmerge, c->resv_blocks_gcmerge*c->sector_size/1024); |
| 308 | D1(printk(KERN_DEBUG "Blocks required to GC bad blocks: %d (%d KiB)\n", | 302 | dbg_fsbuild("Blocks required to GC bad blocks: %d (%d KiB)\n", |
| 309 | c->resv_blocks_gcbad, c->resv_blocks_gcbad*c->sector_size/1024)); | 303 | c->resv_blocks_gcbad, c->resv_blocks_gcbad*c->sector_size/1024); |
| 310 | D1(printk(KERN_DEBUG "Amount of dirty space required to GC: %d bytes\n", | 304 | dbg_fsbuild("Amount of dirty space required to GC: %d bytes\n", |
| 311 | c->nospc_dirty_size)); | 305 | c->nospc_dirty_size); |
| 312 | } | 306 | } |
| 313 | 307 | ||
| 314 | int jffs2_do_mount_fs(struct jffs2_sb_info *c) | 308 | int jffs2_do_mount_fs(struct jffs2_sb_info *c) |
| @@ -358,7 +352,7 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c) | |||
| 358 | return ret; | 352 | return ret; |
| 359 | 353 | ||
| 360 | if (jffs2_build_filesystem(c)) { | 354 | if (jffs2_build_filesystem(c)) { |
| 361 | D1(printk(KERN_DEBUG "build_fs failed\n")); | 355 | dbg_fsbuild("build_fs failed\n"); |
| 362 | jffs2_free_ino_caches(c); | 356 | jffs2_free_ino_caches(c); |
| 363 | jffs2_free_raw_node_refs(c); | 357 | jffs2_free_raw_node_refs(c); |
| 364 | #ifndef __ECOS | 358 | #ifndef __ECOS |
diff --git a/fs/jffs2/debug.c b/fs/jffs2/debug.c index 28983501bc..0947284f45 100644 --- a/fs/jffs2/debug.c +++ b/fs/jffs2/debug.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: debug.c,v 1.10 2005/09/14 16:57:32 dedekind Exp $ | 10 | * $Id: debug.c,v 1.11 2005/09/21 13:28:35 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/pagemap.h> | 15 | #include <linux/pagemap.h> |
| 16 | #include <linux/crc32.h> | 16 | #include <linux/crc32.h> |
| 17 | #include <linux/jffs2.h> | 17 | #include <linux/jffs2.h> |
| 18 | #include <linux/mtd/mtd.h> | ||
| 18 | #include "nodelist.h" | 19 | #include "nodelist.h" |
| 19 | #include "debug.h" | 20 | #include "debug.h" |
| 20 | 21 | ||
diff --git a/fs/jffs2/debug.h b/fs/jffs2/debug.h index 7328e67beb..da1417d389 100644 --- a/fs/jffs2/debug.h +++ b/fs/jffs2/debug.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: debug.h,v 1.16 2005/09/14 16:57:32 dedekind Exp $ | 10 | * $Id: debug.h,v 1.18 2005/09/21 10:26:26 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | #ifndef _JFFS2_DEBUG_H_ | 13 | #ifndef _JFFS2_DEBUG_H_ |
| @@ -23,16 +23,23 @@ | |||
| 23 | /* Enable "paranoia" checks and dumps */ | 23 | /* Enable "paranoia" checks and dumps */ |
| 24 | #define JFFS2_DBG_PARANOIA_CHECKS | 24 | #define JFFS2_DBG_PARANOIA_CHECKS |
| 25 | #define JFFS2_DBG_DUMPS | 25 | #define JFFS2_DBG_DUMPS |
| 26 | |||
| 27 | /* | ||
| 28 | * By defining/undefining the below macros one may select debugging messages | ||
| 29 | * fro specific JFFS2 subsystems. | ||
| 30 | */ | ||
| 26 | #define JFFS2_DBG_READINODE_MESSAGES | 31 | #define JFFS2_DBG_READINODE_MESSAGES |
| 27 | #define JFFS2_DBG_FRAGTREE_MESSAGES | 32 | #define JFFS2_DBG_FRAGTREE_MESSAGES |
| 28 | #define JFFS2_DBG_DENTLIST_MESSAGES | 33 | #define JFFS2_DBG_DENTLIST_MESSAGES |
| 29 | #define JFFS2_DBG_NODEREF_MESSAGES | 34 | #define JFFS2_DBG_NODEREF_MESSAGES |
| 30 | #define JFFS2_DBG_INOCACHE_MESSAGES | 35 | #define JFFS2_DBG_INOCACHE_MESSAGES |
| 31 | #define JFFS2_DBG_SUMMARY_MESSAGES | 36 | #define JFFS2_DBG_SUMMARY_MESSAGES |
| 37 | #define JFFS2_DBG_FSBUILD_MESSAGES | ||
| 32 | #endif | 38 | #endif |
| 33 | 39 | ||
| 34 | #if CONFIG_JFFS2_FS_DEBUG == 2 | 40 | #if CONFIG_JFFS2_FS_DEBUG == 2 |
| 35 | #define JFFS2_DBG_FRAGTREE2_MESSAGES | 41 | #define JFFS2_DBG_FRAGTREE2_MESSAGES |
| 42 | #define JFFS2_DBG_MEMALLOC_MESSAGES | ||
| 36 | #endif | 43 | #endif |
| 37 | 44 | ||
| 38 | /* Sanity checks are supposed to be light-weight and enabled by default */ | 45 | /* Sanity checks are supposed to be light-weight and enabled by default */ |
| @@ -40,7 +47,7 @@ | |||
| 40 | 47 | ||
| 41 | /* | 48 | /* |
| 42 | * Dx() are mainly used for debugging messages, they must go away and be | 49 | * Dx() are mainly used for debugging messages, they must go away and be |
| 43 | * superseded by nicer JFFS2_DBG_XXX() macros... | 50 | * superseded by nicer dbg_xxx() macros... |
| 44 | */ | 51 | */ |
| 45 | #if CONFIG_JFFS2_FS_DEBUG > 0 | 52 | #if CONFIG_JFFS2_FS_DEBUG > 0 |
| 46 | #define D1(x) x | 53 | #define D1(x) x |
| @@ -105,56 +112,63 @@ | |||
| 105 | */ | 112 | */ |
| 106 | /* Read inode debugging messages */ | 113 | /* Read inode debugging messages */ |
| 107 | #ifdef JFFS2_DBG_READINODE_MESSAGES | 114 | #ifdef JFFS2_DBG_READINODE_MESSAGES |
| 108 | #define JFFS2_DBG_READINODE(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 115 | #define dbg_readinode(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 109 | #else | 116 | #else |
| 110 | #define JFFS2_DBG_READINODE(fmt, ...) | 117 | #define dbg_readinode(fmt, ...) |
| 111 | #endif | 118 | #endif |
| 112 | 119 | ||
| 113 | /* Fragtree build debugging messages */ | 120 | /* Fragtree build debugging messages */ |
| 114 | #ifdef JFFS2_DBG_FRAGTREE_MESSAGES | 121 | #ifdef JFFS2_DBG_FRAGTREE_MESSAGES |
| 115 | #define JFFS2_DBG_FRAGTREE(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 122 | #define dbg_fragtree(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 116 | #else | 123 | #else |
| 117 | #define JFFS2_DBG_FRAGTREE(fmt, ...) | 124 | #define dbg_fragtree(fmt, ...) |
| 118 | #endif | 125 | #endif |
| 119 | #ifdef JFFS2_DBG_FRAGTREE2_MESSAGES | 126 | #ifdef JFFS2_DBG_FRAGTREE2_MESSAGES |
| 120 | #define JFFS2_DBG_FRAGTREE2(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 127 | #define dbg_fragtree2(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 121 | #else | 128 | #else |
| 122 | #define JFFS2_DBG_FRAGTREE2(fmt, ...) | 129 | #define dbg_fragtree2(fmt, ...) |
| 123 | #endif | 130 | #endif |
| 124 | 131 | ||
| 125 | /* Directory entry list manilulation debugging messages */ | 132 | /* Directory entry list manilulation debugging messages */ |
| 126 | #ifdef JFFS2_DBG_DENTLIST_MESSAGES | 133 | #ifdef JFFS2_DBG_DENTLIST_MESSAGES |
| 127 | #define JFFS2_DBG_DENTLIST(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 134 | #define dbg_dentlist(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 128 | #else | 135 | #else |
| 129 | #define JFFS2_DBG_DENTLIST(fmt, ...) | 136 | #define dbg_dentlist(fmt, ...) |
| 130 | #endif | 137 | #endif |
| 131 | 138 | ||
| 132 | /* Print the messages about manipulating node_refs */ | 139 | /* Print the messages about manipulating node_refs */ |
| 133 | #ifdef JFFS2_DBG_NODEREF_MESSAGES | 140 | #ifdef JFFS2_DBG_NODEREF_MESSAGES |
| 134 | #define JFFS2_DBG_NODEREF(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 141 | #define dbg_noderef(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 135 | #else | 142 | #else |
| 136 | #define JFFS2_DBG_NODEREF(fmt, ...) | 143 | #define dbg_noderef(fmt, ...) |
| 137 | #endif | 144 | #endif |
| 138 | 145 | ||
| 139 | /* Manipulations with the list of inodes (JFFS2 inocache) */ | 146 | /* Manipulations with the list of inodes (JFFS2 inocache) */ |
| 140 | #ifdef JFFS2_DBG_INOCACHE_MESSAGES | 147 | #ifdef JFFS2_DBG_INOCACHE_MESSAGES |
| 141 | #define JFFS2_DBG_INOCACHE(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 148 | #define dbg_inocache(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 142 | #else | 149 | #else |
| 143 | #define JFFS2_DBG_INOCACHE(fmt, ...) | 150 | #define dbg_inocache(fmt, ...) |
| 144 | #endif | 151 | #endif |
| 145 | 152 | ||
| 146 | /* Summary debugging messages */ | 153 | /* Summary debugging messages */ |
| 147 | #ifdef JFFS2_DBG_SUMMARY_MESSAGES | 154 | #ifdef JFFS2_DBG_SUMMARY_MESSAGES |
| 148 | #define JFFS2_DBG_SUMMARY(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 155 | #define dbg_summary(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 156 | #else | ||
| 157 | #define dbg_summary(fmt, ...) | ||
| 158 | #endif | ||
| 159 | |||
| 160 | /* File system build messages */ | ||
| 161 | #ifdef JFFS2_DBG_FSBUILD_MESSAGES | ||
| 162 | #define dbg_fsbuild(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | ||
| 149 | #else | 163 | #else |
| 150 | #define JFFS2_DBG_SUMMARY(fmt, ...) | 164 | #define dbg_fsbuild(fmt, ...) |
| 151 | #endif | 165 | #endif |
| 152 | 166 | ||
| 153 | /* Watch the object allocations */ | 167 | /* Watch the object allocations */ |
| 154 | #ifdef JFFS2_DBG_MEMALLOC_MESSAGES | 168 | #ifdef JFFS2_DBG_MEMALLOC_MESSAGES |
| 155 | #define JFFS2_DBG_MEMALLOC(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) | 169 | #define dbg_memalloc(fmt, ...) JFFS2_DEBUG(fmt, ##__VA_ARGS__) |
| 156 | #else | 170 | #else |
| 157 | #define JFFS2_DBG_MEMALLOC(fmt, ...) | 171 | #define dbg_memalloc(fmt, ...) |
| 158 | #endif | 172 | #endif |
| 159 | 173 | ||
| 160 | 174 | ||
diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c index a8a0908142..347de4efee 100644 --- a/fs/jffs2/erase.c +++ b/fs/jffs2/erase.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: erase.c,v 1.83 2005/07/22 10:32:08 dedekind Exp $ | 10 | * $Id: erase.c,v 1.85 2005/09/20 14:53:15 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
diff --git a/fs/jffs2/malloc.c b/fs/jffs2/malloc.c index 734801145b..f27df015f3 100644 --- a/fs/jffs2/malloc.c +++ b/fs/jffs2/malloc.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: malloc.c,v 1.29 2005/07/27 14:16:53 dedekind Exp $ | 10 | * $Id: malloc.c,v 1.30 2005/09/20 14:27:34 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| @@ -97,13 +97,13 @@ struct jffs2_full_dirent *jffs2_alloc_full_dirent(int namesize) | |||
| 97 | { | 97 | { |
| 98 | struct jffs2_full_dirent *ret; | 98 | struct jffs2_full_dirent *ret; |
| 99 | ret = kmalloc(sizeof(struct jffs2_full_dirent) + namesize, GFP_KERNEL); | 99 | ret = kmalloc(sizeof(struct jffs2_full_dirent) + namesize, GFP_KERNEL); |
| 100 | JFFS2_DBG_MEMALLOC("%p\n", ret); | 100 | dbg_memalloc("%p\n", ret); |
| 101 | return ret; | 101 | return ret; |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | void jffs2_free_full_dirent(struct jffs2_full_dirent *x) | 104 | void jffs2_free_full_dirent(struct jffs2_full_dirent *x) |
| 105 | { | 105 | { |
| 106 | JFFS2_DBG_MEMALLOC("%p\n", x); | 106 | dbg_memalloc("%p\n", x); |
| 107 | kfree(x); | 107 | kfree(x); |
| 108 | } | 108 | } |
| 109 | 109 | ||
| @@ -111,13 +111,13 @@ struct jffs2_full_dnode *jffs2_alloc_full_dnode(void) | |||
| 111 | { | 111 | { |
| 112 | struct jffs2_full_dnode *ret; | 112 | struct jffs2_full_dnode *ret; |
| 113 | ret = kmem_cache_alloc(full_dnode_slab, GFP_KERNEL); | 113 | ret = kmem_cache_alloc(full_dnode_slab, GFP_KERNEL); |
| 114 | JFFS2_DBG_MEMALLOC("%p\n", ret); | 114 | dbg_memalloc("%p\n", ret); |
| 115 | return ret; | 115 | return ret; |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | void jffs2_free_full_dnode(struct jffs2_full_dnode *x) | 118 | void jffs2_free_full_dnode(struct jffs2_full_dnode *x) |
| 119 | { | 119 | { |
| 120 | JFFS2_DBG_MEMALLOC("%p\n", x); | 120 | dbg_memalloc("%p\n", x); |
| 121 | kmem_cache_free(full_dnode_slab, x); | 121 | kmem_cache_free(full_dnode_slab, x); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| @@ -125,13 +125,13 @@ struct jffs2_raw_dirent *jffs2_alloc_raw_dirent(void) | |||
| 125 | { | 125 | { |
| 126 | struct jffs2_raw_dirent *ret; | 126 | struct jffs2_raw_dirent *ret; |
| 127 | ret = kmem_cache_alloc(raw_dirent_slab, GFP_KERNEL); | 127 | ret = kmem_cache_alloc(raw_dirent_slab, GFP_KERNEL); |
| 128 | JFFS2_DBG_MEMALLOC("%p\n", ret); | 128 | dbg_memalloc("%p\n", ret); |
| 129 | return ret; | 129 | return ret; |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | void jffs2_free_raw_dirent(struct jffs2_raw_dirent *x) | 132 | void jffs2_free_raw_dirent(struct jffs2_raw_dirent *x) |
| 133 | { | 133 | { |
| 134 | JFFS2_DBG_MEMALLOC("%p\n", x); | 134 | dbg_memalloc("%p\n", x); |
| 135 | kmem_cache_free(raw_dirent_slab, x); | 135 | kmem_cache_free(raw_dirent_slab, x); |
| 136 | } | 136 | } |
| 137 | 137 | ||
| @@ -139,13 +139,13 @@ struct jffs2_raw_inode *jffs2_alloc_raw_inode(void) | |||
| 139 | { | 139 | { |
| 140 | struct jffs2_raw_inode *ret; | 140 | struct jffs2_raw_inode *ret; |
| 141 | ret = kmem_cache_alloc(raw_inode_slab, GFP_KERNEL); | 141 | ret = kmem_cache_alloc(raw_inode_slab, GFP_KERNEL); |
| 142 | JFFS2_DBG_MEMALLOC("%p\n", ret); | 142 | dbg_memalloc("%p\n", ret); |
| 143 | return ret; | 143 | return ret; |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | void jffs2_free_raw_inode(struct jffs2_raw_inode *x) | 146 | void jffs2_free_raw_inode(struct jffs2_raw_inode *x) |
| 147 | { | 147 | { |
| 148 | JFFS2_DBG_MEMALLOC("%p\n", x); | 148 | dbg_memalloc("%p\n", x); |
| 149 | kmem_cache_free(raw_inode_slab, x); | 149 | kmem_cache_free(raw_inode_slab, x); |
| 150 | } | 150 | } |
| 151 | 151 | ||
| @@ -153,14 +153,14 @@ struct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void) | |||
| 153 | { | 153 | { |
| 154 | struct jffs2_tmp_dnode_info *ret; | 154 | struct jffs2_tmp_dnode_info *ret; |
| 155 | ret = kmem_cache_alloc(tmp_dnode_info_slab, GFP_KERNEL); | 155 | ret = kmem_cache_alloc(tmp_dnode_info_slab, GFP_KERNEL); |
| 156 | JFFS2_DBG_MEMALLOC("%p\n", | 156 | dbg_memalloc("%p\n", |
| 157 | ret); | 157 | ret); |
| 158 | return ret; | 158 | return ret; |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x) | 161 | void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x) |
| 162 | { | 162 | { |
| 163 | JFFS2_DBG_MEMALLOC("%p\n", x); | 163 | dbg_memalloc("%p\n", x); |
| 164 | kmem_cache_free(tmp_dnode_info_slab, x); | 164 | kmem_cache_free(tmp_dnode_info_slab, x); |
| 165 | } | 165 | } |
| 166 | 166 | ||
| @@ -168,13 +168,13 @@ struct jffs2_raw_node_ref *jffs2_alloc_raw_node_ref(void) | |||
| 168 | { | 168 | { |
| 169 | struct jffs2_raw_node_ref *ret; | 169 | struct jffs2_raw_node_ref *ret; |
| 170 | ret = kmem_cache_alloc(raw_node_ref_slab, GFP_KERNEL); | 170 | ret = kmem_cache_alloc(raw_node_ref_slab, GFP_KERNEL); |
| 171 | JFFS2_DBG_MEMALLOC("%p\n", ret); | 171 | dbg_memalloc("%p\n", ret); |
| 172 | return ret; | 172 | return ret; |
| 173 | } | 173 | } |
| 174 | 174 | ||
| 175 | void jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *x) | 175 | void jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *x) |
| 176 | { | 176 | { |
| 177 | JFFS2_DBG_MEMALLOC("%p\n", x); | 177 | dbg_memalloc("%p\n", x); |
| 178 | kmem_cache_free(raw_node_ref_slab, x); | 178 | kmem_cache_free(raw_node_ref_slab, x); |
| 179 | } | 179 | } |
| 180 | 180 | ||
| @@ -182,13 +182,13 @@ struct jffs2_node_frag *jffs2_alloc_node_frag(void) | |||
| 182 | { | 182 | { |
| 183 | struct jffs2_node_frag *ret; | 183 | struct jffs2_node_frag *ret; |
| 184 | ret = kmem_cache_alloc(node_frag_slab, GFP_KERNEL); | 184 | ret = kmem_cache_alloc(node_frag_slab, GFP_KERNEL); |
| 185 | JFFS2_DBG_MEMALLOC("%p\n", ret); | 185 | dbg_memalloc("%p\n", ret); |
| 186 | return ret; | 186 | return ret; |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | void jffs2_free_node_frag(struct jffs2_node_frag *x) | 189 | void jffs2_free_node_frag(struct jffs2_node_frag *x) |
| 190 | { | 190 | { |
| 191 | JFFS2_DBG_MEMALLOC("%p\n", x); | 191 | dbg_memalloc("%p\n", x); |
| 192 | kmem_cache_free(node_frag_slab, x); | 192 | kmem_cache_free(node_frag_slab, x); |
| 193 | } | 193 | } |
| 194 | 194 | ||
| @@ -196,12 +196,12 @@ struct jffs2_inode_cache *jffs2_alloc_inode_cache(void) | |||
| 196 | { | 196 | { |
| 197 | struct jffs2_inode_cache *ret; | 197 | struct jffs2_inode_cache *ret; |
| 198 | ret = kmem_cache_alloc(inode_cache_slab, GFP_KERNEL); | 198 | ret = kmem_cache_alloc(inode_cache_slab, GFP_KERNEL); |
| 199 | JFFS2_DBG_MEMALLOC("%p\n", ret); | 199 | dbg_memalloc("%p\n", ret); |
| 200 | return ret; | 200 | return ret; |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | void jffs2_free_inode_cache(struct jffs2_inode_cache *x) | 203 | void jffs2_free_inode_cache(struct jffs2_inode_cache *x) |
| 204 | { | 204 | { |
| 205 | JFFS2_DBG_MEMALLOC("%p\n", x); | 205 | dbg_memalloc("%p\n", x); |
| 206 | kmem_cache_free(inode_cache_slab, x); | 206 | kmem_cache_free(inode_cache_slab, x); |
| 207 | } | 207 | } |
diff --git a/fs/jffs2/nodelist.c b/fs/jffs2/nodelist.c index 9abb5f4cfd..80fe8feffb 100644 --- a/fs/jffs2/nodelist.c +++ b/fs/jffs2/nodelist.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: nodelist.c,v 1.112 2005/08/22 09:07:09 dedekind Exp $ | 10 | * $Id: nodelist.c,v 1.114 2005/09/21 13:28:35 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| @@ -25,18 +25,18 @@ void jffs2_add_fd_to_list(struct jffs2_sb_info *c, struct jffs2_full_dirent *new | |||
| 25 | { | 25 | { |
| 26 | struct jffs2_full_dirent **prev = list; | 26 | struct jffs2_full_dirent **prev = list; |
| 27 | 27 | ||
| 28 | JFFS2_DBG_DENTLIST("add dirent \"%s\", ino #%u\n", new->name, new->ino); | 28 | dbg_dentlist("add dirent \"%s\", ino #%u\n", new->name, new->ino); |
| 29 | 29 | ||
| 30 | while ((*prev) && (*prev)->nhash <= new->nhash) { | 30 | while ((*prev) && (*prev)->nhash <= new->nhash) { |
| 31 | if ((*prev)->nhash == new->nhash && !strcmp((*prev)->name, new->name)) { | 31 | if ((*prev)->nhash == new->nhash && !strcmp((*prev)->name, new->name)) { |
| 32 | /* Duplicate. Free one */ | 32 | /* Duplicate. Free one */ |
| 33 | if (new->version < (*prev)->version) { | 33 | if (new->version < (*prev)->version) { |
| 34 | JFFS2_DBG_DENTLIST("Eep! Marking new dirent node is obsolete, old is \"%s\", ino #%u\n", | 34 | dbg_dentlist("Eep! Marking new dirent node is obsolete, old is \"%s\", ino #%u\n", |
| 35 | (*prev)->name, (*prev)->ino); | 35 | (*prev)->name, (*prev)->ino); |
| 36 | jffs2_mark_node_obsolete(c, new->raw); | 36 | jffs2_mark_node_obsolete(c, new->raw); |
| 37 | jffs2_free_full_dirent(new); | 37 | jffs2_free_full_dirent(new); |
| 38 | } else { | 38 | } else { |
| 39 | JFFS2_DBG_DENTLIST("marking old dirent \"%s\", ino #%u bsolete\n", | 39 | dbg_dentlist("marking old dirent \"%s\", ino #%u bsolete\n", |
| 40 | (*prev)->name, (*prev)->ino); | 40 | (*prev)->name, (*prev)->ino); |
| 41 | new->next = (*prev)->next; | 41 | new->next = (*prev)->next; |
| 42 | jffs2_mark_node_obsolete(c, ((*prev)->raw)); | 42 | 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 | |||
| 55 | { | 55 | { |
| 56 | struct jffs2_node_frag *frag = jffs2_lookup_node_frag(list, size); | 56 | struct jffs2_node_frag *frag = jffs2_lookup_node_frag(list, size); |
| 57 | 57 | ||
| 58 | JFFS2_DBG_FRAGTREE("truncating fragtree to 0x%08x bytes\n", size); | 58 | dbg_fragtree("truncating fragtree to 0x%08x bytes\n", size); |
| 59 | 59 | ||
| 60 | /* We know frag->ofs <= size. That's what lookup does for us */ | 60 | /* We know frag->ofs <= size. That's what lookup does for us */ |
| 61 | if (frag && frag->ofs != size) { | 61 | if (frag && frag->ofs != size) { |
| @@ -81,7 +81,7 @@ void jffs2_truncate_fragtree(struct jffs2_sb_info *c, struct rb_root *list, uint | |||
| 81 | */ | 81 | */ |
| 82 | frag = frag_last(list); | 82 | frag = frag_last(list); |
| 83 | if (frag->node && (frag->ofs & (PAGE_CACHE_SIZE - 1)) == 0) { | 83 | if (frag->node && (frag->ofs & (PAGE_CACHE_SIZE - 1)) == 0) { |
| 84 | JFFS2_DBG_FRAGTREE2("marking the last fragment 0x%08x-0x%08x REF_PRISTINE.\n", | 84 | dbg_fragtree2("marking the last fragment 0x%08x-0x%08x REF_PRISTINE.\n", |
| 85 | frag->ofs, frag->ofs + frag->size); | 85 | frag->ofs, frag->ofs + frag->size); |
| 86 | frag->node->raw->flash_offset = ref_offset(frag->node->raw) | REF_PRISTINE; | 86 | frag->node->raw->flash_offset = ref_offset(frag->node->raw) | REF_PRISTINE; |
| 87 | } | 87 | } |
| @@ -93,12 +93,12 @@ void jffs2_obsolete_node_frag(struct jffs2_sb_info *c, struct jffs2_node_frag *t | |||
| 93 | this->node->frags--; | 93 | this->node->frags--; |
| 94 | if (!this->node->frags) { | 94 | if (!this->node->frags) { |
| 95 | /* The node has no valid frags left. It's totally obsoleted */ | 95 | /* The node has no valid frags left. It's totally obsoleted */ |
| 96 | JFFS2_DBG_FRAGTREE2("marking old node @0x%08x (0x%04x-0x%04x) obsolete\n", | 96 | dbg_fragtree2("marking old node @0x%08x (0x%04x-0x%04x) obsolete\n", |
| 97 | ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size); | 97 | ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size); |
| 98 | jffs2_mark_node_obsolete(c, this->node->raw); | 98 | jffs2_mark_node_obsolete(c, this->node->raw); |
| 99 | jffs2_free_full_dnode(this->node); | 99 | jffs2_free_full_dnode(this->node); |
| 100 | } else { | 100 | } else { |
| 101 | JFFS2_DBG_FRAGTREE2("marking old node @0x%08x (0x%04x-0x%04x) REF_NORMAL. frags is %d\n", | 101 | dbg_fragtree2("marking old node @0x%08x (0x%04x-0x%04x) REF_NORMAL. frags is %d\n", |
| 102 | ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size, this->node->frags); | 102 | ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size, this->node->frags); |
| 103 | mark_ref_normal(this->node->raw); | 103 | mark_ref_normal(this->node->raw); |
| 104 | } | 104 | } |
| @@ -112,7 +112,7 @@ static void jffs2_fragtree_insert(struct jffs2_node_frag *newfrag, struct jffs2_ | |||
| 112 | struct rb_node *parent = &base->rb; | 112 | struct rb_node *parent = &base->rb; |
| 113 | struct rb_node **link = &parent; | 113 | struct rb_node **link = &parent; |
| 114 | 114 | ||
| 115 | JFFS2_DBG_FRAGTREE2("insert frag (0x%04x-0x%04x)\n", newfrag->ofs, newfrag->ofs + newfrag->size); | 115 | dbg_fragtree2("insert frag (0x%04x-0x%04x)\n", newfrag->ofs, newfrag->ofs + newfrag->size); |
| 116 | 116 | ||
| 117 | while (*link) { | 117 | while (*link) { |
| 118 | parent = *link; | 118 | parent = *link; |
| @@ -172,11 +172,11 @@ static int no_overlapping_node(struct jffs2_sb_info *c, struct rb_root *root, | |||
| 172 | /* By definition, the 'this' node has no right-hand child, | 172 | /* By definition, the 'this' node has no right-hand child, |
| 173 | because there are no frags with offset greater than it. | 173 | because there are no frags with offset greater than it. |
| 174 | So that's where we want to put the hole */ | 174 | So that's where we want to put the hole */ |
| 175 | JFFS2_DBG_FRAGTREE2("add hole frag %#04x-%#04x on the right of the new frag.\n", | 175 | dbg_fragtree2("add hole frag %#04x-%#04x on the right of the new frag.\n", |
| 176 | holefrag->ofs, holefrag->ofs + holefrag->size); | 176 | holefrag->ofs, holefrag->ofs + holefrag->size); |
| 177 | rb_link_node(&holefrag->rb, &this->rb, &this->rb.rb_right); | 177 | rb_link_node(&holefrag->rb, &this->rb, &this->rb.rb_right); |
| 178 | } else { | 178 | } else { |
| 179 | JFFS2_DBG_FRAGTREE2("Add hole frag %#04x-%#04x to the root of the tree.\n", | 179 | dbg_fragtree2("Add hole frag %#04x-%#04x to the root of the tree.\n", |
| 180 | holefrag->ofs, holefrag->ofs + holefrag->size); | 180 | holefrag->ofs, holefrag->ofs + holefrag->size); |
| 181 | rb_link_node(&holefrag->rb, NULL, &root->rb_node); | 181 | rb_link_node(&holefrag->rb, NULL, &root->rb_node); |
| 182 | } | 182 | } |
| @@ -188,10 +188,10 @@ static int no_overlapping_node(struct jffs2_sb_info *c, struct rb_root *root, | |||
| 188 | /* By definition, the 'this' node has no right-hand child, | 188 | /* By definition, the 'this' node has no right-hand child, |
| 189 | because there are no frags with offset greater than it. | 189 | because there are no frags with offset greater than it. |
| 190 | So that's where we want to put new fragment */ | 190 | So that's where we want to put new fragment */ |
| 191 | JFFS2_DBG_FRAGTREE2("add the new node at the right\n"); | 191 | dbg_fragtree2("add the new node at the right\n"); |
| 192 | rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right); | 192 | rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right); |
| 193 | } else { | 193 | } else { |
| 194 | JFFS2_DBG_FRAGTREE2("insert the new node at the root of the tree\n"); | 194 | dbg_fragtree2("insert the new node at the root of the tree\n"); |
| 195 | rb_link_node(&newfrag->rb, NULL, &root->rb_node); | 195 | rb_link_node(&newfrag->rb, NULL, &root->rb_node); |
| 196 | } | 196 | } |
| 197 | rb_insert_color(&newfrag->rb, root); | 197 | 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 | |||
| 209 | this = jffs2_lookup_node_frag(root, newfrag->node->ofs); | 209 | this = jffs2_lookup_node_frag(root, newfrag->node->ofs); |
| 210 | 210 | ||
| 211 | if (this) { | 211 | if (this) { |
| 212 | JFFS2_DBG_FRAGTREE2("lookup gave frag 0x%04x-0x%04x; phys 0x%08x (*%p)\n", | 212 | dbg_fragtree2("lookup gave frag 0x%04x-0x%04x; phys 0x%08x (*%p)\n", |
| 213 | this->ofs, this->ofs+this->size, this->node?(ref_offset(this->node->raw)):0xffffffff, this); | 213 | this->ofs, this->ofs+this->size, this->node?(ref_offset(this->node->raw)):0xffffffff, this); |
| 214 | lastend = this->ofs + this->size; | 214 | lastend = this->ofs + this->size; |
| 215 | } else { | 215 | } else { |
| 216 | JFFS2_DBG_FRAGTREE2("lookup gave no frag\n"); | 216 | dbg_fragtree2("lookup gave no frag\n"); |
| 217 | lastend = 0; | 217 | lastend = 0; |
| 218 | } | 218 | } |
| 219 | 219 | ||
| @@ -235,11 +235,11 @@ static int jffs2_add_frag_to_fragtree(struct jffs2_sb_info *c, struct rb_root *r | |||
| 235 | } | 235 | } |
| 236 | 236 | ||
| 237 | if (this->node) | 237 | if (this->node) |
| 238 | JFFS2_DBG_FRAGTREE2("dealing with frag %u-%u, phys %#08x(%d).\n", | 238 | dbg_fragtree2("dealing with frag %u-%u, phys %#08x(%d).\n", |
| 239 | this->ofs, this->ofs + this->size, | 239 | this->ofs, this->ofs + this->size, |
| 240 | ref_offset(this->node->raw), ref_flags(this->node->raw)); | 240 | ref_offset(this->node->raw), ref_flags(this->node->raw)); |
| 241 | else | 241 | else |
| 242 | JFFS2_DBG_FRAGTREE2("dealing with hole frag %u-%u.\n", | 242 | dbg_fragtree2("dealing with hole frag %u-%u.\n", |
| 243 | this->ofs, this->ofs + this->size); | 243 | this->ofs, this->ofs + this->size); |
| 244 | 244 | ||
| 245 | /* OK. 'this' is pointing at the first frag that newfrag->ofs at least partially obsoletes, | 245 | /* 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 | |||
| 259 | struct jffs2_node_frag *newfrag2; | 259 | struct jffs2_node_frag *newfrag2; |
| 260 | 260 | ||
| 261 | if (this->node) | 261 | if (this->node) |
| 262 | JFFS2_DBG_FRAGTREE2("split old frag 0x%04x-0x%04x, phys 0x%08x\n", | 262 | dbg_fragtree2("split old frag 0x%04x-0x%04x, phys 0x%08x\n", |
| 263 | this->ofs, this->ofs+this->size, ref_offset(this->node->raw)); | 263 | this->ofs, this->ofs+this->size, ref_offset(this->node->raw)); |
| 264 | else | 264 | else |
| 265 | JFFS2_DBG_FRAGTREE2("split old hole frag 0x%04x-0x%04x\n", | 265 | dbg_fragtree2("split old hole frag 0x%04x-0x%04x\n", |
| 266 | this->ofs, this->ofs+this->size); | 266 | this->ofs, this->ofs+this->size); |
| 267 | 267 | ||
| 268 | /* New second frag pointing to this's node */ | 268 | /* 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 | |||
| 299 | } else { | 299 | } else { |
| 300 | /* New frag starts at the same point as 'this' used to. Replace | 300 | /* New frag starts at the same point as 'this' used to. Replace |
| 301 | it in the tree without doing a delete and insertion */ | 301 | it in the tree without doing a delete and insertion */ |
| 302 | JFFS2_DBG_FRAGTREE2("inserting newfrag (*%p),%d-%d in before 'this' (*%p),%d-%d\n", | 302 | dbg_fragtree2("inserting newfrag (*%p),%d-%d in before 'this' (*%p),%d-%d\n", |
| 303 | newfrag, newfrag->ofs, newfrag->ofs+newfrag->size, this, this->ofs, this->ofs+this->size); | 303 | newfrag, newfrag->ofs, newfrag->ofs+newfrag->size, this, this->ofs, this->ofs+this->size); |
| 304 | 304 | ||
| 305 | rb_replace_node(&this->rb, &newfrag->rb, root); | 305 | rb_replace_node(&this->rb, &newfrag->rb, root); |
| 306 | 306 | ||
| 307 | if (newfrag->ofs + newfrag->size >= this->ofs+this->size) { | 307 | if (newfrag->ofs + newfrag->size >= this->ofs+this->size) { |
| 308 | JFFS2_DBG_FRAGTREE2("obsoleting node frag %p (%x-%x)\n", this, this->ofs, this->ofs+this->size); | 308 | dbg_fragtree2("obsoleting node frag %p (%x-%x)\n", this, this->ofs, this->ofs+this->size); |
| 309 | jffs2_obsolete_node_frag(c, this); | 309 | jffs2_obsolete_node_frag(c, this); |
| 310 | } else { | 310 | } else { |
| 311 | this->ofs += newfrag->size; | 311 | this->ofs += newfrag->size; |
| @@ -321,7 +321,7 @@ static int jffs2_add_frag_to_fragtree(struct jffs2_sb_info *c, struct rb_root *r | |||
| 321 | */ | 321 | */ |
| 322 | while ((this = frag_next(newfrag)) && newfrag->ofs + newfrag->size >= this->ofs + this->size) { | 322 | while ((this = frag_next(newfrag)) && newfrag->ofs + newfrag->size >= this->ofs + this->size) { |
| 323 | /* 'this' frag is obsoleted completely. */ | 323 | /* 'this' frag is obsoleted completely. */ |
| 324 | JFFS2_DBG_FRAGTREE2("obsoleting node frag %p (%x-%x) and removing from tree\n", | 324 | dbg_fragtree2("obsoleting node frag %p (%x-%x) and removing from tree\n", |
| 325 | this, this->ofs, this->ofs+this->size); | 325 | this, this->ofs, this->ofs+this->size); |
| 326 | rb_erase(&this->rb, root); | 326 | rb_erase(&this->rb, root); |
| 327 | jffs2_obsolete_node_frag(c, this); | 327 | 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 | |||
| 361 | return -ENOMEM; | 361 | return -ENOMEM; |
| 362 | newfrag->node->frags = 1; | 362 | newfrag->node->frags = 1; |
| 363 | 363 | ||
| 364 | JFFS2_DBG_FRAGTREE("adding node %#04x-%#04x @0x%08x on flash, newfrag *%p\n", | 364 | dbg_fragtree("adding node %#04x-%#04x @0x%08x on flash, newfrag *%p\n", |
| 365 | fn->ofs, fn->ofs+fn->size, ref_offset(fn->raw), newfrag); | 365 | fn->ofs, fn->ofs+fn->size, ref_offset(fn->raw), newfrag); |
| 366 | 366 | ||
| 367 | ret = jffs2_add_frag_to_fragtree(c, &f->fragtree, newfrag); | 367 | 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 | |||
| 410 | 410 | ||
| 411 | BUG_ON(tn->csize == 0); | 411 | BUG_ON(tn->csize == 0); |
| 412 | 412 | ||
| 413 | if (!jffs2_is_writebuffered(c)) | ||
| 414 | goto adj_acc; | ||
| 415 | |||
| 413 | /* Calculate how many bytes were already checked */ | 416 | /* Calculate how many bytes were already checked */ |
| 414 | ofs = ref_offset(ref) + sizeof(struct jffs2_raw_inode); | 417 | ofs = ref_offset(ref) + sizeof(struct jffs2_raw_inode); |
| 415 | len = ofs & (c->wbuf_pagesize - 1); | 418 | len = ofs % c->wbuf_pagesize; |
| 416 | if (likely(len)) | 419 | if (likely(len)) |
| 417 | len = c->wbuf_pagesize - len; | 420 | len = c->wbuf_pagesize - len; |
| 418 | 421 | ||
| 419 | if (len >= tn->csize) { | 422 | if (len >= tn->csize) { |
| 420 | JFFS2_DBG_READINODE("no need to check node at %#08x, data length %u, data starts at %#08x - it has already been checked.\n", | 423 | dbg_readinode("no need to check node at %#08x, data length %u, data starts at %#08x - it has already been checked.\n", |
| 421 | ref_offset(ref), tn->csize, ofs); | 424 | ref_offset(ref), tn->csize, ofs); |
| 422 | goto adj_acc; | 425 | goto adj_acc; |
| 423 | } | 426 | } |
| @@ -425,7 +428,7 @@ static int check_node_data(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info | |||
| 425 | ofs += len; | 428 | ofs += len; |
| 426 | len = tn->csize - len; | 429 | len = tn->csize - len; |
| 427 | 430 | ||
| 428 | 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", | 431 | 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", |
| 429 | ref_offset(ref), tn->csize, tn->partial_crc, tn->data_crc, ofs - len, ofs, len); | 432 | ref_offset(ref), tn->csize, tn->partial_crc, tn->data_crc, ofs - len, ofs, len); |
| 430 | 433 | ||
| 431 | #ifndef __ECOS | 434 | #ifndef __ECOS |
| @@ -520,7 +523,7 @@ static inline int check_node(struct jffs2_sb_info *c, struct jffs2_inode_info *f | |||
| 520 | if (ref_flags(tn->fn->raw) != REF_UNCHECKED) | 523 | if (ref_flags(tn->fn->raw) != REF_UNCHECKED) |
| 521 | return 0; | 524 | return 0; |
| 522 | 525 | ||
| 523 | JFFS2_DBG_FRAGTREE2("check node %#04x-%#04x, phys offs %#08x.\n", | 526 | dbg_fragtree2("check node %#04x-%#04x, phys offs %#08x.\n", |
| 524 | tn->fn->ofs, tn->fn->ofs + tn->fn->size, ref_offset(tn->fn->raw)); | 527 | tn->fn->ofs, tn->fn->ofs + tn->fn->size, ref_offset(tn->fn->raw)); |
| 525 | 528 | ||
| 526 | ret = check_node_data(c, tn); | 529 | 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 | |||
| 528 | JFFS2_ERROR("check_node_data() returned error: %d.\n", | 531 | JFFS2_ERROR("check_node_data() returned error: %d.\n", |
| 529 | ret); | 532 | ret); |
| 530 | } else if (unlikely(ret > 0)) { | 533 | } else if (unlikely(ret > 0)) { |
| 531 | JFFS2_DBG_FRAGTREE2("CRC error, mark it obsolete.\n"); | 534 | dbg_fragtree2("CRC error, mark it obsolete.\n"); |
| 532 | jffs2_mark_node_obsolete(c, tn->fn->raw); | 535 | jffs2_mark_node_obsolete(c, tn->fn->raw); |
| 533 | } | 536 | } |
| 534 | 537 | ||
| @@ -544,7 +547,7 @@ static inline int check_node(struct jffs2_sb_info *c, struct jffs2_inode_info *f | |||
| 544 | static int split_hole(struct jffs2_sb_info *c, struct rb_root *root, | 547 | static int split_hole(struct jffs2_sb_info *c, struct rb_root *root, |
| 545 | struct jffs2_node_frag *newfrag, struct jffs2_node_frag *hole) | 548 | struct jffs2_node_frag *newfrag, struct jffs2_node_frag *hole) |
| 546 | { | 549 | { |
| 547 | JFFS2_DBG_FRAGTREE2("fragment %#04x-%#04x splits the hole %#04x-%#04x\n", | 550 | dbg_fragtree2("fragment %#04x-%#04x splits the hole %#04x-%#04x\n", |
| 548 | newfrag->ofs, newfrag->ofs + newfrag->size, hole->ofs, hole->ofs + hole->size); | 551 | newfrag->ofs, newfrag->ofs + newfrag->size, hole->ofs, hole->ofs + hole->size); |
| 549 | 552 | ||
| 550 | if (hole->ofs == newfrag->ofs) { | 553 | if (hole->ofs == newfrag->ofs) { |
| @@ -558,7 +561,7 @@ static int split_hole(struct jffs2_sb_info *c, struct rb_root *root, | |||
| 558 | * the new node. | 561 | * the new node. |
| 559 | */ | 562 | */ |
| 560 | 563 | ||
| 561 | JFFS2_DBG_FRAGTREE2("insert fragment %#04x-%#04x and cut the left part of the hole\n", | 564 | dbg_fragtree2("insert fragment %#04x-%#04x and cut the left part of the hole\n", |
| 562 | newfrag->ofs, newfrag->ofs + newfrag->size); | 565 | newfrag->ofs, newfrag->ofs + newfrag->size); |
| 563 | rb_replace_node(&hole->rb, &newfrag->rb, root); | 566 | rb_replace_node(&hole->rb, &newfrag->rb, root); |
| 564 | 567 | ||
| @@ -576,7 +579,7 @@ static int split_hole(struct jffs2_sb_info *c, struct rb_root *root, | |||
| 576 | * Ah, the new fragment is of the same size as the hole. | 579 | * Ah, the new fragment is of the same size as the hole. |
| 577 | * Relace the hole by it. | 580 | * Relace the hole by it. |
| 578 | */ | 581 | */ |
| 579 | JFFS2_DBG_FRAGTREE2("insert fragment %#04x-%#04x and overwrite hole\n", | 582 | dbg_fragtree2("insert fragment %#04x-%#04x and overwrite hole\n", |
| 580 | newfrag->ofs, newfrag->ofs + newfrag->size); | 583 | newfrag->ofs, newfrag->ofs + newfrag->size); |
| 581 | rb_replace_node(&hole->rb, &newfrag->rb, root); | 584 | rb_replace_node(&hole->rb, &newfrag->rb, root); |
| 582 | jffs2_free_node_frag(hole); | 585 | jffs2_free_node_frag(hole); |
| @@ -598,14 +601,14 @@ static int split_hole(struct jffs2_sb_info *c, struct rb_root *root, | |||
| 598 | } | 601 | } |
| 599 | 602 | ||
| 600 | hole->size = newfrag->ofs - hole->ofs; | 603 | hole->size = newfrag->ofs - hole->ofs; |
| 601 | JFFS2_DBG_FRAGTREE2("left the hole %#04x-%#04x at the left and inserd fragment %#04x-%#04x\n", | 604 | dbg_fragtree2("left the hole %#04x-%#04x at the left and inserd fragment %#04x-%#04x\n", |
| 602 | hole->ofs, hole->ofs + hole->size, newfrag->ofs, newfrag->ofs + newfrag->size); | 605 | hole->ofs, hole->ofs + hole->size, newfrag->ofs, newfrag->ofs + newfrag->size); |
| 603 | 606 | ||
| 604 | jffs2_fragtree_insert(newfrag, hole); | 607 | jffs2_fragtree_insert(newfrag, hole); |
| 605 | rb_insert_color(&newfrag->rb, root); | 608 | rb_insert_color(&newfrag->rb, root); |
| 606 | 609 | ||
| 607 | if (newfrag2) { | 610 | if (newfrag2) { |
| 608 | JFFS2_DBG_FRAGTREE2("left the hole %#04x-%#04x at the right\n", | 611 | dbg_fragtree2("left the hole %#04x-%#04x at the right\n", |
| 609 | newfrag2->ofs, newfrag2->ofs + newfrag2->size); | 612 | newfrag2->ofs, newfrag2->ofs + newfrag2->size); |
| 610 | jffs2_fragtree_insert(newfrag2, newfrag); | 613 | jffs2_fragtree_insert(newfrag2, newfrag); |
| 611 | rb_insert_color(&newfrag2->rb, root); | 614 | 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 | |||
| 640 | int err, checked = 0; | 643 | int err, checked = 0; |
| 641 | int ref_flag; | 644 | int ref_flag; |
| 642 | 645 | ||
| 643 | JFFS2_DBG_FRAGTREE("insert fragment %#04x-%#04x, ver %u\n", fn_ofs, fn_ofs + fn_size, tn->version); | 646 | dbg_fragtree("insert fragment %#04x-%#04x, ver %u\n", fn_ofs, fn_ofs + fn_size, tn->version); |
| 644 | 647 | ||
| 645 | /* Skip all the nodes which are completed before this one starts */ | 648 | /* Skip all the nodes which are completed before this one starts */ |
| 646 | this = jffs2_lookup_node_frag(root, fn_ofs); | 649 | this = jffs2_lookup_node_frag(root, fn_ofs); |
| 647 | if (this) | 650 | if (this) |
| 648 | JFFS2_DBG_FRAGTREE2("'this' found %#04x-%#04x (%s)\n", this->ofs, this->ofs + this->size, this->node ? "data" : "hole"); | 651 | dbg_fragtree2("'this' found %#04x-%#04x (%s)\n", this->ofs, this->ofs + this->size, this->node ? "data" : "hole"); |
| 649 | 652 | ||
| 650 | if (this) | 653 | if (this) |
| 651 | lastend = this->ofs + this->size; | 654 | lastend = this->ofs + this->size; |
| @@ -745,7 +748,7 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode | |||
| 745 | * The new node starts at the same offset as | 748 | * The new node starts at the same offset as |
| 746 | * the hole and supersieds the hole. | 749 | * the hole and supersieds the hole. |
| 747 | */ | 750 | */ |
| 748 | JFFS2_DBG_FRAGTREE2("add the new fragment instead of hole %#04x-%#04x, refcnt %d\n", | 751 | dbg_fragtree2("add the new fragment instead of hole %#04x-%#04x, refcnt %d\n", |
| 749 | fn_ofs, fn_ofs + this->ofs + this->size - fn_ofs, fn->frags); | 752 | fn_ofs, fn_ofs + this->ofs + this->size - fn_ofs, fn->frags); |
| 750 | 753 | ||
| 751 | rb_replace_node(&this->rb, &newfrag->rb, root); | 754 | 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 | |||
| 755 | * The hole becomes shorter as its right part | 758 | * The hole becomes shorter as its right part |
| 756 | * is supersieded by the new fragment. | 759 | * is supersieded by the new fragment. |
| 757 | */ | 760 | */ |
| 758 | JFFS2_DBG_FRAGTREE2("reduce size of hole %#04x-%#04x to %#04x-%#04x\n", | 761 | dbg_fragtree2("reduce size of hole %#04x-%#04x to %#04x-%#04x\n", |
| 759 | this->ofs, this->ofs + this->size, this->ofs, this->ofs + this->size - newfrag->size); | 762 | this->ofs, this->ofs + this->size, this->ofs, this->ofs + this->size - newfrag->size); |
| 760 | 763 | ||
| 761 | JFFS2_DBG_FRAGTREE2("add new fragment %#04x-%#04x, refcnt %d\n", fn_ofs, | 764 | dbg_fragtree2("add new fragment %#04x-%#04x, refcnt %d\n", fn_ofs, |
| 762 | fn_ofs + this->ofs + this->size - fn_ofs, fn->frags); | 765 | fn_ofs + this->ofs + this->size - fn_ofs, fn->frags); |
| 763 | 766 | ||
| 764 | this->size -= newfrag->size; | 767 | this->size -= newfrag->size; |
| @@ -771,7 +774,7 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode | |||
| 771 | this = rb_entry(rb_next(&newfrag->rb), | 774 | this = rb_entry(rb_next(&newfrag->rb), |
| 772 | struct jffs2_node_frag, rb); | 775 | struct jffs2_node_frag, rb); |
| 773 | 776 | ||
| 774 | JFFS2_DBG_FRAGTREE2("switch to the next 'this' fragment: %#04x-%#04x %s\n", | 777 | dbg_fragtree2("switch to the next 'this' fragment: %#04x-%#04x %s\n", |
| 775 | this->ofs, this->ofs + this->size, this->node ? "(data)" : "(hole)"); | 778 | this->ofs, this->ofs + this->size, this->node ? "(data)" : "(hole)"); |
| 776 | } | 779 | } |
| 777 | 780 | ||
| @@ -782,7 +785,7 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode | |||
| 782 | if (this->ofs + this->size >= fn_ofs + fn_size) { | 785 | if (this->ofs + this->size >= fn_ofs + fn_size) { |
| 783 | /* The new node is obsolete, drop it */ | 786 | /* The new node is obsolete, drop it */ |
| 784 | if (fn->frags == 0) { | 787 | if (fn->frags == 0) { |
| 785 | JFFS2_DBG_FRAGTREE2("%#04x-%#04x is obsolete, mark it obsolete\n", fn_ofs, fn_ofs + fn_size); | 788 | dbg_fragtree2("%#04x-%#04x is obsolete, mark it obsolete\n", fn_ofs, fn_ofs + fn_size); |
| 786 | ref_flag = REF_OBSOLETE; | 789 | ref_flag = REF_OBSOLETE; |
| 787 | } | 790 | } |
| 788 | goto out_ok; | 791 | goto out_ok; |
| @@ -790,13 +793,13 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode | |||
| 790 | struct jffs2_node_frag *new_this; | 793 | struct jffs2_node_frag *new_this; |
| 791 | 794 | ||
| 792 | /* 'This' node obsoletes the beginning of the new node */ | 795 | /* 'This' node obsoletes the beginning of the new node */ |
| 793 | JFFS2_DBG_FRAGTREE2("the beginning %#04x-%#04x is obsolete\n", fn_ofs, this->ofs + this->size); | 796 | dbg_fragtree2("the beginning %#04x-%#04x is obsolete\n", fn_ofs, this->ofs + this->size); |
| 794 | 797 | ||
| 795 | ref_flag = REF_NORMAL; | 798 | ref_flag = REF_NORMAL; |
| 796 | 799 | ||
| 797 | fn_size -= this->ofs + this->size - fn_ofs; | 800 | fn_size -= this->ofs + this->size - fn_ofs; |
| 798 | fn_ofs = this->ofs + this->size; | 801 | fn_ofs = this->ofs + this->size; |
| 799 | JFFS2_DBG_FRAGTREE2("now considering %#04x-%#04x\n", fn_ofs, fn_ofs + fn_size); | 802 | dbg_fragtree2("now considering %#04x-%#04x\n", fn_ofs, fn_ofs + fn_size); |
| 800 | 803 | ||
| 801 | new_this = rb_entry(rb_next(&this->rb), struct jffs2_node_frag, rb); | 804 | new_this = rb_entry(rb_next(&this->rb), struct jffs2_node_frag, rb); |
| 802 | if (!new_this) { | 805 | if (!new_this) { |
| @@ -816,14 +819,14 @@ int jffs2_add_older_frag_to_fragtree(struct jffs2_sb_info *c, struct jffs2_inode | |||
| 816 | if (unlikely(!newfrag)) | 819 | if (unlikely(!newfrag)) |
| 817 | return -ENOMEM; | 820 | return -ENOMEM; |
| 818 | 821 | ||
| 819 | JFFS2_DBG_FRAGTREE2("there are no more fragments, insert %#04x-%#04x\n", | 822 | dbg_fragtree2("there are no more fragments, insert %#04x-%#04x\n", |
| 820 | newfrag->ofs, newfrag->ofs + newfrag->size); | 823 | newfrag->ofs, newfrag->ofs + newfrag->size); |
| 821 | rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right); | 824 | rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right); |
| 822 | rb_insert_color(&newfrag->rb, root); | 825 | rb_insert_color(&newfrag->rb, root); |
| 823 | goto out_ok; | 826 | goto out_ok; |
| 824 | } else { | 827 | } else { |
| 825 | this = new_this; | 828 | this = new_this; |
| 826 | JFFS2_DBG_FRAGTREE2("switch to the next 'this' fragment: %#04x-%#04x %s\n", | 829 | dbg_fragtree2("switch to the next 'this' fragment: %#04x-%#04x %s\n", |
| 827 | this->ofs, this->ofs + this->size, this->node ? "(data)" : "(hole)"); | 830 | this->ofs, this->ofs + this->size, this->node ? "(data)" : "(hole)"); |
| 828 | } | 831 | } |
| 829 | } | 832 | } |
| @@ -833,13 +836,13 @@ out_ok: | |||
| 833 | BUG_ON(fn->size < PAGE_CACHE_SIZE && ref_flag == REF_PRISTINE); | 836 | BUG_ON(fn->size < PAGE_CACHE_SIZE && ref_flag == REF_PRISTINE); |
| 834 | 837 | ||
| 835 | if (ref_flag == REF_OBSOLETE) { | 838 | if (ref_flag == REF_OBSOLETE) { |
| 836 | JFFS2_DBG_FRAGTREE2("the node is obsolete now\n"); | 839 | dbg_fragtree2("the node is obsolete now\n"); |
| 837 | /* jffs2_mark_node_obsolete() will adjust space accounting */ | 840 | /* jffs2_mark_node_obsolete() will adjust space accounting */ |
| 838 | jffs2_mark_node_obsolete(c, fn->raw); | 841 | jffs2_mark_node_obsolete(c, fn->raw); |
| 839 | return 1; | 842 | return 1; |
| 840 | } | 843 | } |
| 841 | 844 | ||
| 842 | JFFS2_DBG_FRAGTREE2("the node is \"%s\" now\n", ref_flag == REF_NORMAL ? "REF_NORMAL" : "REF_PRISTINE"); | 845 | dbg_fragtree2("the node is \"%s\" now\n", ref_flag == REF_NORMAL ? "REF_NORMAL" : "REF_PRISTINE"); |
| 843 | 846 | ||
| 844 | /* Space accounting was adjusted at check_node_data() */ | 847 | /* Space accounting was adjusted at check_node_data() */ |
| 845 | spin_lock(&c->erase_completion_lock); | 848 | 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 | |||
| 885 | if (!new->ino) | 888 | if (!new->ino) |
| 886 | new->ino = ++c->highest_ino; | 889 | new->ino = ++c->highest_ino; |
| 887 | 890 | ||
| 888 | JFFS2_DBG_INOCACHE("add %p (ino #%u)\n", new, new->ino); | 891 | dbg_inocache("add %p (ino #%u)\n", new, new->ino); |
| 889 | 892 | ||
| 890 | prev = &c->inocache_list[new->ino % INOCACHE_HASHSIZE]; | 893 | prev = &c->inocache_list[new->ino % INOCACHE_HASHSIZE]; |
| 891 | 894 | ||
| @@ -902,7 +905,7 @@ void jffs2_del_ino_cache(struct jffs2_sb_info *c, struct jffs2_inode_cache *old) | |||
| 902 | { | 905 | { |
| 903 | struct jffs2_inode_cache **prev; | 906 | struct jffs2_inode_cache **prev; |
| 904 | 907 | ||
| 905 | JFFS2_DBG_INOCACHE("del %p (ino #%u)\n", old, old->ino); | 908 | dbg_inocache("del %p (ino #%u)\n", old, old->ino); |
| 906 | spin_lock(&c->inocache_lock); | 909 | spin_lock(&c->inocache_lock); |
| 907 | 910 | ||
| 908 | prev = &c->inocache_list[old->ino % INOCACHE_HASHSIZE]; | 911 | 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_ | |||
| 965 | struct jffs2_node_frag *prev = NULL; | 968 | struct jffs2_node_frag *prev = NULL; |
| 966 | struct jffs2_node_frag *frag = NULL; | 969 | struct jffs2_node_frag *frag = NULL; |
| 967 | 970 | ||
| 968 | JFFS2_DBG_FRAGTREE2("root %p, offset %d\n", fragtree, offset); | 971 | dbg_fragtree2("root %p, offset %d\n", fragtree, offset); |
| 969 | 972 | ||
| 970 | next = fragtree->rb_node; | 973 | next = fragtree->rb_node; |
| 971 | 974 | ||
| @@ -988,10 +991,10 @@ struct jffs2_node_frag *jffs2_lookup_node_frag(struct rb_root *fragtree, uint32_ | |||
| 988 | and return the closest smaller one */ | 991 | and return the closest smaller one */ |
| 989 | 992 | ||
| 990 | if (prev) | 993 | if (prev) |
| 991 | JFFS2_DBG_FRAGTREE2("no match. Returning frag %#04x-%#04x, closest previous\n", | 994 | dbg_fragtree2("no match. Returning frag %#04x-%#04x, closest previous\n", |
| 992 | prev->ofs, prev->ofs+prev->size); | 995 | prev->ofs, prev->ofs+prev->size); |
| 993 | else | 996 | else |
| 994 | JFFS2_DBG_FRAGTREE2("returning NULL, empty fragtree\n"); | 997 | dbg_fragtree2("returning NULL, empty fragtree\n"); |
| 995 | 998 | ||
| 996 | return prev; | 999 | return prev; |
| 997 | } | 1000 | } |
| @@ -1006,7 +1009,7 @@ void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c) | |||
| 1006 | if (!root->rb_node) | 1009 | if (!root->rb_node) |
| 1007 | return; | 1010 | return; |
| 1008 | 1011 | ||
| 1009 | JFFS2_DBG_FRAGTREE("killing\n"); | 1012 | dbg_fragtree("killing\n"); |
| 1010 | 1013 | ||
| 1011 | frag = (rb_entry(root->rb_node, struct jffs2_node_frag, rb)); | 1014 | frag = (rb_entry(root->rb_node, struct jffs2_node_frag, rb)); |
| 1012 | while(frag) { | 1015 | while(frag) { |
diff --git a/fs/jffs2/nodemgmt.c b/fs/jffs2/nodemgmt.c index 2cf576ae11..2c938d1bff 100644 --- a/fs/jffs2/nodemgmt.c +++ b/fs/jffs2/nodemgmt.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: nodemgmt.c,v 1.126 2005/09/16 12:58:17 havasi Exp $ | 10 | * $Id: nodemgmt.c,v 1.127 2005/09/20 15:49:12 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| @@ -273,7 +273,7 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin | |||
| 273 | 273 | ||
| 274 | if (jeb) { | 274 | if (jeb) { |
| 275 | reserved_size = PAD(sumsize + c->summary->sum_size + JFFS2_SUMMARY_FRAME_SIZE); | 275 | reserved_size = PAD(sumsize + c->summary->sum_size + JFFS2_SUMMARY_FRAME_SIZE); |
| 276 | JFFS2_DBG_SUMMARY("minsize=%d , jeb->free=%d ," | 276 | dbg_summary("minsize=%d , jeb->free=%d ," |
| 277 | "summary->size=%d , sumsize=%d\n", | 277 | "summary->size=%d , sumsize=%d\n", |
| 278 | minsize, jeb->free_size, | 278 | minsize, jeb->free_size, |
| 279 | c->summary->sum_size, sumsize); | 279 | c->summary->sum_size, sumsize); |
| @@ -291,7 +291,7 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin | |||
| 291 | } | 291 | } |
| 292 | 292 | ||
| 293 | /* Writing out the collected summary information */ | 293 | /* Writing out the collected summary information */ |
| 294 | JFFS2_DBG_SUMMARY("generating summary for 0x%08x.\n", jeb->offset); | 294 | dbg_summary("generating summary for 0x%08x.\n", jeb->offset); |
| 295 | ret = jffs2_sum_write_sumnode(c); | 295 | ret = jffs2_sum_write_sumnode(c); |
| 296 | 296 | ||
| 297 | if (ret) | 297 | if (ret) |
diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h index e026888cf1..48ad4202fb 100644 --- a/fs/jffs2/os-linux.h +++ b/fs/jffs2/os-linux.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: os-linux.h,v 1.61 2005/09/07 08:34:54 havasi Exp $ | 10 | * $Id: os-linux.h,v 1.63 2005/09/21 11:55:21 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| @@ -80,8 +80,8 @@ static inline void jffs2_init_inode_info(struct jffs2_inode_info *f) | |||
| 80 | 80 | ||
| 81 | #define jffs2_flash_write(c, ofs, len, retlen, buf) jffs2_flash_direct_write(c, ofs, len, retlen, buf) | 81 | #define jffs2_flash_write(c, ofs, len, retlen, buf) jffs2_flash_direct_write(c, ofs, len, retlen, buf) |
| 82 | #define jffs2_flash_read(c, ofs, len, retlen, buf) ((c)->mtd->read((c)->mtd, ofs, len, retlen, buf)) | 82 | #define jffs2_flash_read(c, ofs, len, retlen, buf) ((c)->mtd->read((c)->mtd, ofs, len, retlen, buf)) |
| 83 | #define jffs2_flush_wbuf_pad(c) ({ (void)(c), 0; }) | 83 | #define jffs2_flush_wbuf_pad(c) ({ do{} while(0); (void)(c), 0; }) |
| 84 | #define jffs2_flush_wbuf_gc(c, i) ({ (void)(c), (void) i, 0; }) | 84 | #define jffs2_flush_wbuf_gc(c, i) ({ do{} while(0); (void)(c), (void) i, 0; }) |
| 85 | #define jffs2_write_nand_badblock(c,jeb,bad_offset) (1) | 85 | #define jffs2_write_nand_badblock(c,jeb,bad_offset) (1) |
| 86 | #define jffs2_nand_flash_setup(c) (0) | 86 | #define jffs2_nand_flash_setup(c) (0) |
| 87 | #define jffs2_nand_flash_cleanup(c) do {} while(0) | 87 | #define jffs2_nand_flash_cleanup(c) do {} while(0) |
diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c index 6f1e4a7ecd..08f8c5ec61 100644 --- a/fs/jffs2/readinode.c +++ b/fs/jffs2/readinode.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: readinode.c,v 1.141 2005/08/17 14:57:39 dedekind Exp $ | 10 | * $Id: readinode.c,v 1.142 2005/09/20 14:27:34 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| @@ -97,7 +97,7 @@ static struct jffs2_raw_node_ref *jffs2_first_valid_node(struct jffs2_raw_node_r | |||
| 97 | while (ref && ref->next_in_ino) { | 97 | while (ref && ref->next_in_ino) { |
| 98 | if (!ref_obsolete(ref)) | 98 | if (!ref_obsolete(ref)) |
| 99 | return ref; | 99 | return ref; |
| 100 | JFFS2_DBG_NODEREF("node at 0x%08x is obsoleted. Ignoring.\n", ref_offset(ref)); | 100 | dbg_noderef("node at 0x%08x is obsoleted. Ignoring.\n", ref_offset(ref)); |
| 101 | ref = ref->next_in_ino; | 101 | ref = ref->next_in_ino; |
| 102 | } | 102 | } |
| 103 | return NULL; | 103 | return NULL; |
| @@ -274,7 +274,7 @@ static inline int read_dnode(struct jffs2_sb_info *c, struct jffs2_raw_node_ref | |||
| 274 | len = min_t(uint32_t, rdlen - sizeof(*rd), csize); | 274 | len = min_t(uint32_t, rdlen - sizeof(*rd), csize); |
| 275 | tn->partial_crc = crc32(0, buf, len); | 275 | tn->partial_crc = crc32(0, buf, len); |
| 276 | 276 | ||
| 277 | JFFS2_DBG_READINODE("Calculates CRC (%#08x) for %d bytes, csize %d\n", tn->partial_crc, len, csize); | 277 | dbg_readinode("Calculates CRC (%#08x) for %d bytes, csize %d\n", tn->partial_crc, len, csize); |
| 278 | 278 | ||
| 279 | /* If we actually calculated the whole data CRC | 279 | /* If we actually calculated the whole data CRC |
| 280 | * and it is wrong, drop the node. */ | 280 | * 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 | |||
| 293 | */ | 293 | */ |
| 294 | struct jffs2_eraseblock *jeb; | 294 | struct jffs2_eraseblock *jeb; |
| 295 | 295 | ||
| 296 | JFFS2_DBG_READINODE("the node has no data.\n"); | 296 | dbg_readinode("the node has no data.\n"); |
| 297 | jeb = &c->blocks[ref->flash_offset / c->sector_size]; | 297 | jeb = &c->blocks[ref->flash_offset / c->sector_size]; |
| 298 | len = ref_totlen(c, jeb, ref); | 298 | len = ref_totlen(c, jeb, ref); |
| 299 | 299 | ||
| @@ -327,7 +327,7 @@ static inline int read_dnode(struct jffs2_sb_info *c, struct jffs2_raw_node_ref | |||
| 327 | else // normal case... | 327 | else // normal case... |
| 328 | tn->fn->size = je32_to_cpu(rd->dsize); | 328 | tn->fn->size = je32_to_cpu(rd->dsize); |
| 329 | 329 | ||
| 330 | JFFS2_DBG_READINODE("dnode @%08x: ver %u, offset %#04x, dsize %#04x, csize %#04x\n", | 330 | dbg_readinode("dnode @%08x: ver %u, offset %#04x, dsize %#04x, csize %#04x\n", |
| 331 | ref_offset(ref), je32_to_cpu(rd->version), je32_to_cpu(rd->offset), je32_to_cpu(rd->dsize), csize); | 331 | ref_offset(ref), je32_to_cpu(rd->version), je32_to_cpu(rd->offset), je32_to_cpu(rd->dsize), csize); |
| 332 | 332 | ||
| 333 | jffs2_add_tn_to_tree(tn, tnp); | 333 | 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, | |||
| 424 | len = right_size - *rdlen; | 424 | len = right_size - *rdlen; |
| 425 | } | 425 | } |
| 426 | 426 | ||
| 427 | JFFS2_DBG_READINODE("read more %d bytes\n", len); | 427 | dbg_readinode("read more %d bytes\n", len); |
| 428 | 428 | ||
| 429 | err = jffs2_flash_read(c, offs, len, &retlen, bufstart); | 429 | err = jffs2_flash_read(c, offs, len, &retlen, bufstart); |
| 430 | if (err) { | 430 | if (err) { |
| @@ -461,7 +461,7 @@ static int jffs2_get_inode_nodes(struct jffs2_sb_info *c, struct jffs2_inode_inf | |||
| 461 | 461 | ||
| 462 | *mctime_ver = 0; | 462 | *mctime_ver = 0; |
| 463 | 463 | ||
| 464 | JFFS2_DBG_READINODE("ino #%u\n", f->inocache->ino); | 464 | dbg_readinode("ino #%u\n", f->inocache->ino); |
| 465 | 465 | ||
| 466 | if (jffs2_is_writebuffered(c)) { | 466 | if (jffs2_is_writebuffered(c)) { |
| 467 | /* | 467 | /* |
| @@ -531,7 +531,7 @@ static int jffs2_get_inode_nodes(struct jffs2_sb_info *c, struct jffs2_inode_inf | |||
| 531 | len = JFFS2_MIN_NODE_HEADER; | 531 | len = JFFS2_MIN_NODE_HEADER; |
| 532 | } | 532 | } |
| 533 | 533 | ||
| 534 | JFFS2_DBG_READINODE("read %d bytes at %#08x(%d).\n", len, ref_offset(ref), ref_flags(ref)); | 534 | dbg_readinode("read %d bytes at %#08x(%d).\n", len, ref_offset(ref), ref_flags(ref)); |
| 535 | 535 | ||
| 536 | /* FIXME: point() */ | 536 | /* FIXME: point() */ |
| 537 | err = jffs2_flash_read(c, ref_offset(ref), len, | 537 | 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 | |||
| 614 | *fdp = ret_fd; | 614 | *fdp = ret_fd; |
| 615 | kfree(buf); | 615 | kfree(buf); |
| 616 | 616 | ||
| 617 | JFFS2_DBG_READINODE("nodes of inode #%u were read, the highest version is %u, latest_mctime %u, mctime_ver %u.\n", | 617 | dbg_readinode("nodes of inode #%u were read, the highest version is %u, latest_mctime %u, mctime_ver %u.\n", |
| 618 | f->inocache->ino, *highest_version, *latest_mctime, *mctime_ver); | 618 | f->inocache->ino, *highest_version, *latest_mctime, *mctime_ver); |
| 619 | return 0; | 619 | return 0; |
| 620 | 620 | ||
| @@ -639,7 +639,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c, | |||
| 639 | size_t retlen; | 639 | size_t retlen; |
| 640 | int ret; | 640 | int ret; |
| 641 | 641 | ||
| 642 | JFFS2_DBG_READINODE("ino #%u nlink is %d\n", f->inocache->ino, f->inocache->nlink); | 642 | dbg_readinode("ino #%u nlink is %d\n", f->inocache->ino, f->inocache->nlink); |
| 643 | 643 | ||
| 644 | /* Grab all nodes relevant to this ino */ | 644 | /* Grab all nodes relevant to this ino */ |
| 645 | ret = jffs2_get_inode_nodes(c, f, &tn_list, &fd_list, &f->highest_version, &latest_mctime, &mctime_ver); | 645 | 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, | |||
| 659 | tn = rb_entry(rb, struct jffs2_tmp_dnode_info, rb); | 659 | tn = rb_entry(rb, struct jffs2_tmp_dnode_info, rb); |
| 660 | fn = tn->fn; | 660 | fn = tn->fn; |
| 661 | ret = 1; | 661 | ret = 1; |
| 662 | JFFS2_DBG_READINODE("consider node ver %u, phys offset " | 662 | dbg_readinode("consider node ver %u, phys offset " |
| 663 | "%#08x(%d), range %u-%u.\n", tn->version, | 663 | "%#08x(%d), range %u-%u.\n", tn->version, |
| 664 | ref_offset(fn->raw), ref_flags(fn->raw), | 664 | ref_offset(fn->raw), ref_flags(fn->raw), |
| 665 | fn->ofs, fn->ofs + fn->size); | 665 | fn->ofs, fn->ofs + fn->size); |
| @@ -703,7 +703,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c, | |||
| 703 | 703 | ||
| 704 | jffs2_free_tmp_dnode_info(tn); | 704 | jffs2_free_tmp_dnode_info(tn); |
| 705 | if (ret) { | 705 | if (ret) { |
| 706 | JFFS2_DBG_READINODE("delete dnode %u-%u.\n", | 706 | dbg_readinode("delete dnode %u-%u.\n", |
| 707 | fn->ofs, fn->ofs + fn->size); | 707 | fn->ofs, fn->ofs + fn->size); |
| 708 | jffs2_free_full_dnode(fn); | 708 | jffs2_free_full_dnode(fn); |
| 709 | } | 709 | } |
| @@ -803,7 +803,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c, | |||
| 803 | } | 803 | } |
| 804 | 804 | ||
| 805 | f->target[je32_to_cpu(latest_node->csize)] = '\0'; | 805 | f->target[je32_to_cpu(latest_node->csize)] = '\0'; |
| 806 | JFFS2_DBG_READINODE("symlink's target '%s' cached\n", f->target); | 806 | dbg_readinode("symlink's target '%s' cached\n", f->target); |
| 807 | } | 807 | } |
| 808 | 808 | ||
| 809 | /* fall through... */ | 809 | /* fall through... */ |
| @@ -851,7 +851,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c, | |||
| 851 | int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | 851 | int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, |
| 852 | uint32_t ino, struct jffs2_raw_inode *latest_node) | 852 | uint32_t ino, struct jffs2_raw_inode *latest_node) |
| 853 | { | 853 | { |
| 854 | JFFS2_DBG_READINODE("read inode #%u\n", ino); | 854 | dbg_readinode("read inode #%u\n", ino); |
| 855 | 855 | ||
| 856 | retry_inocache: | 856 | retry_inocache: |
| 857 | spin_lock(&c->inocache_lock); | 857 | spin_lock(&c->inocache_lock); |
| @@ -870,7 +870,7 @@ int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | |||
| 870 | /* If it's in either of these states, we need | 870 | /* If it's in either of these states, we need |
| 871 | to wait for whoever's got it to finish and | 871 | to wait for whoever's got it to finish and |
| 872 | put it back. */ | 872 | put it back. */ |
| 873 | JFFS2_DBG_READINODE("waiting for ino #%u in state %d\n", ino, f->inocache->state); | 873 | dbg_readinode("waiting for ino #%u in state %d\n", ino, f->inocache->state); |
| 874 | sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock); | 874 | sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock); |
| 875 | goto retry_inocache; | 875 | goto retry_inocache; |
| 876 | 876 | ||
| @@ -897,7 +897,7 @@ int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | |||
| 897 | JFFS2_ERROR("cannot allocate inocache for root inode\n"); | 897 | JFFS2_ERROR("cannot allocate inocache for root inode\n"); |
| 898 | return -ENOMEM; | 898 | return -ENOMEM; |
| 899 | } | 899 | } |
| 900 | JFFS2_DBG_READINODE("creating inocache for root inode\n"); | 900 | dbg_readinode("creating inocache for root inode\n"); |
| 901 | memset(f->inocache, 0, sizeof(struct jffs2_inode_cache)); | 901 | memset(f->inocache, 0, sizeof(struct jffs2_inode_cache)); |
| 902 | f->inocache->ino = f->inocache->nlink = 1; | 902 | f->inocache->ino = f->inocache->nlink = 1; |
| 903 | f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; | 903 | f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; |
diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c index 4e60ba8da1..8df7456472 100644 --- a/fs/jffs2/scan.c +++ b/fs/jffs2/scan.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * For licensing information, see the file 'LICENCE' in this directory. | 8 | * For licensing information, see the file 'LICENCE' in this directory. |
| 9 | * | 9 | * |
| 10 | * $Id: scan.c,v 1.122 2005/09/07 08:34:54 havasi Exp $ | 10 | * $Id: scan.c,v 1.124 2005/09/21 13:05:22 dedekind Exp $ |
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| @@ -429,7 +429,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo | |||
| 429 | 429 | ||
| 430 | noise = 10; | 430 | noise = 10; |
| 431 | 431 | ||
| 432 | JFFS2_DBG_SUMMARY("no summary found in jeb 0x%08x. Apply original scan.\n",jeb->offset); | 432 | dbg_summary("no summary found in jeb 0x%08x. Apply original scan.\n",jeb->offset); |
| 433 | 433 | ||
| 434 | scan_more: | 434 | scan_more: |
| 435 | while(ofs < jeb->offset + c->sector_size) { | 435 | while(ofs < jeb->offset + c->sector_size) { |
| @@ -684,7 +684,7 @@ scan_more: | |||
| 684 | 684 | ||
| 685 | if (jffs2_sum_active()) { | 685 | if (jffs2_sum_active()) { |
| 686 | if (PAD(s->sum_size + JFFS2_SUMMARY_FRAME_SIZE) > jeb->free_size) { | 686 | if (PAD(s->sum_size + JFFS2_SUMMARY_FRAME_SIZE) > jeb->free_size) { |
| 687 | JFFS2_DBG_SUMMARY("There is not enough space for " | 687 | dbg_summary("There is not enough space for " |
| 688 | "summary information, disabling for this jeb!\n"); | 688 | "summary information, disabling for this jeb!\n"); |
| 689 | jffs2_sum_disable_collecting(s); | 689 | jffs2_sum_disable_collecting(s); |
| 690 | } | 690 | } |
| @@ -920,76 +920,34 @@ void jffs2_rotate_lists(struct jffs2_sb_info *c) | |||
| 920 | x = count_list(&c->clean_list); | 920 | x = count_list(&c->clean_list); |
| 921 | if (x) { | 921 | if (x) { |
| 922 | rotateby = pseudo_random % x; | 922 | rotateby = pseudo_random % x; |
| 923 | D1(printk(KERN_DEBUG "Rotating clean_list by %d\n", rotateby)); | ||
| 924 | |||
| 925 | rotate_list((&c->clean_list), rotateby); | 923 | rotate_list((&c->clean_list), rotateby); |
| 926 | |||
| 927 | D1(printk(KERN_DEBUG "Erase block at front of clean_list is at %08x\n", | ||
| 928 | list_entry(c->clean_list.next, struct jffs2_eraseblock, list)->offset)); | ||
| 929 | } else { | ||
| 930 | D1(printk(KERN_DEBUG "Not rotating empty clean_list\n")); | ||
| 931 | } | 924 | } |
| 932 | 925 | ||
| 933 | x = count_list(&c->very_dirty_list); | 926 | x = count_list(&c->very_dirty_list); |
| 934 | if (x) { | 927 | if (x) { |
| 935 | rotateby = pseudo_random % x; | 928 | rotateby = pseudo_random % x; |
| 936 | D1(printk(KERN_DEBUG "Rotating very_dirty_list by %d\n", rotateby)); | ||
| 937 | |||
| 938 | rotate_list((&c->very_dirty_list), rotateby); | 929 | rotate_list((&c->very_dirty_list), rotateby); |
| 939 | |||
| 940 | D1(printk(KERN_DEBUG "Erase block at front of very_dirty_list is at %08x\n", | ||
| 941 | list_entry(c->very_dirty_list.next, struct jffs2_eraseblock, list)->offset)); | ||
| 942 | } else { | ||
| 943 | D1(printk(KERN_DEBUG "Not rotating empty very_dirty_list\n")); | ||
| 944 | } | 930 | } |
| 945 | 931 | ||
| 946 | x = count_list(&c->dirty_list); | 932 | x = count_list(&c->dirty_list); |
| 947 | if (x) { | 933 | if (x) { |
| 948 | rotateby = pseudo_random % x; | 934 | rotateby = pseudo_random % x; |
| 949 | D1(printk(KERN_DEBUG "Rotating dirty_list by %d\n", rotateby)); | ||
| 950 | |||
| 951 | rotate_list((&c->dirty_list), rotateby); | 935 | rotate_list((&c->dirty_list), rotateby); |
| 952 | |||
| 953 | D1(printk(KERN_DEBUG "Erase block at front of dirty_list is at %08x\n", | ||
| 954 | list_entry(c->dirty_list.next, struct jffs2_eraseblock, list)->offset)); | ||
| 955 | } else { | ||
| 956 | D1(printk(KERN_DEBUG "Not rotating empty dirty_list\n")); | ||
| 957 | } | 936 | } |
| 958 | 937 | ||
| 959 | x = count_list(&c->erasable_list); | 938 | x = count_list(&c->erasable_list); |
| 960 | if (x) { | 939 | if (x) { |
| 961 | rotateby = pseudo_random % x; | 940 | rotateby = pseudo_random % x; |
| 962 | D1(printk(KERN_DEBUG "Rotating erasable_list by %d\n", rotateby)); | ||
| 963 | |||
| 964 | rotate_list((&c->erasable_list), rotateby); | 941 | rotate_list((&c->erasable_list), rotateby); |
| 965 | |||
| 966 | D1(printk(KERN_DEBUG "Erase block at front of erasable_list is at %08x\n", | ||
| 967 | list_entry(c->erasable_list.next, struct jffs2_eraseblock, list)->offset)); | ||
| 968 | } else { | ||
| 969 | D1(printk(KERN_DEBUG "Not rotating empty erasable_list\n")); | ||
| 970 | } | 942 | } |
| 971 | 943 | ||
| 972 | if (c->nr_erasing_blocks) { | 944 | if (c->nr_erasing_blocks) { |
| 973 | rotateby = pseudo_random % c->nr_erasing_blocks; | 945 | rotateby = pseudo_random % c->nr_erasing_blocks; |
| 974 | D1(printk(KERN_DEBUG "Rotating erase_pending_list by %d\n", rotateby)); | ||
| 975 | |||
| 976 | rotate_list((&c->erase_pending_list), rotateby); | 946 | rotate_list((&c->erase_pending_list), rotateby); |
| 977 | |||
| 978 | D1(printk(KERN_DEBUG "Erase block at front of erase_pending_list is at %08x\n", | ||
| 979 | list_entry(c->erase_pending_list.next, struct jffs2_eraseblock, list)->offset)); | ||
| 980 | } else { | ||
| 981 | D1(printk(KERN_DEBUG "Not rotating empty erase_pending_list\n")); | ||
| 982 | } | 947 | } |
| 983 | 948 | ||
| 984 | if (c->nr_free_blocks) { | 949 | if (c->nr_free_blocks) { |
| 985 | rotateby = pseudo_random % c->nr_free_blocks; | 950 | rotateby = pseudo_random % c->nr_free_blocks; |
| 986 | D1(printk(KERN_DEBUG "Rotating free_list by %d\n", rotateby)); | ||
| 987 | |||
| 988 | rotate_list((&c->free_list), rotateby); | 951 | rotate_list((&c->free_list), rotateby); |
| 989 | |||
| 990 | D1(printk(KERN_DEBUG "Erase block at front of free_list is at %08x\n", | ||
| 991 | list_entry(c->free_list.next, struct jffs2_eraseblock, list)->offset)); | ||
| 992 | } else { | ||
| 993 | D1(printk(KERN_DEBUG "Not rotating empty free_list\n")); | ||
| 994 | } | 952 | } |
| 995 | } | 953 | } |
diff --git a/fs/jffs2/summary.c b/fs/jffs2/summary.c index cb5dd8f11e..1ebc81e447 100644 --- a/fs/jffs2/summary.c +++ b/fs/jffs2/summary.c | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | * | 8 | * |
| 9 | * For licensing information, see the file 'LICENCE' in this directory. | 9 | * For licensing information, see the file 'LICENCE' in this directory. |
| 10 | * | 10 | * |
| 11 | * $Id: summary.c,v 1.1 2005/09/07 08:34:54 havasi Exp $ | 11 | * $Id: summary.c,v 1.3 2005/09/21 14:43:07 dedekind Exp $ |
| 12 | * | 12 | * |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| @@ -38,17 +38,18 @@ int jffs2_sum_init(struct jffs2_sb_info *c) | |||
| 38 | 38 | ||
| 39 | if (!c->summary->sum_buf) { | 39 | if (!c->summary->sum_buf) { |
| 40 | JFFS2_WARNING("Can't allocate buffer for writing out summary information!\n"); | 40 | JFFS2_WARNING("Can't allocate buffer for writing out summary information!\n"); |
| 41 | kfree(c->summary); | ||
| 41 | return -ENOMEM; | 42 | return -ENOMEM; |
| 42 | } | 43 | } |
| 43 | 44 | ||
| 44 | JFFS2_DBG_SUMMARY("returned succesfully\n"); | 45 | dbg_summary("returned succesfully\n"); |
| 45 | 46 | ||
| 46 | return 0; | 47 | return 0; |
| 47 | } | 48 | } |
| 48 | 49 | ||
| 49 | void jffs2_sum_exit(struct jffs2_sb_info *c) | 50 | void jffs2_sum_exit(struct jffs2_sb_info *c) |
| 50 | { | 51 | { |
| 51 | JFFS2_DBG_SUMMARY("called\n"); | 52 | dbg_summary("called\n"); |
| 52 | 53 | ||
| 53 | jffs2_sum_disable_collecting(c->summary); | 54 | jffs2_sum_disable_collecting(c->summary); |
| 54 | 55 | ||
| @@ -71,13 +72,13 @@ static int jffs2_sum_add_mem(struct jffs2_summary *s, union jffs2_sum_mem *item) | |||
| 71 | case JFFS2_NODETYPE_INODE: | 72 | case JFFS2_NODETYPE_INODE: |
| 72 | s->sum_size += JFFS2_SUMMARY_INODE_SIZE; | 73 | s->sum_size += JFFS2_SUMMARY_INODE_SIZE; |
| 73 | s->sum_num++; | 74 | s->sum_num++; |
| 74 | JFFS2_DBG_SUMMARY("inode (%u) added to summary\n", | 75 | dbg_summary("inode (%u) added to summary\n", |
| 75 | je32_to_cpu(item->i.inode)); | 76 | je32_to_cpu(item->i.inode)); |
| 76 | break; | 77 | break; |
| 77 | case JFFS2_NODETYPE_DIRENT: | 78 | case JFFS2_NODETYPE_DIRENT: |
| 78 | s->sum_size += JFFS2_SUMMARY_DIRENT_SIZE(item->d.nsize); | 79 | s->sum_size += JFFS2_SUMMARY_DIRENT_SIZE(item->d.nsize); |
| 79 | s->sum_num++; | 80 | s->sum_num++; |
| 80 | JFFS2_DBG_SUMMARY("dirent (%u) added to summary\n", | 81 | dbg_summary("dirent (%u) added to summary\n", |
| 81 | je32_to_cpu(item->d.ino)); | 82 | je32_to_cpu(item->d.ino)); |
| 82 | break; | 83 | break; |
| 83 | default: | 84 | default: |
| @@ -93,7 +94,7 @@ static int jffs2_sum_add_mem(struct jffs2_summary *s, union jffs2_sum_mem *item) | |||
| 93 | 94 | ||
| 94 | int jffs2_sum_add_padding_mem(struct jffs2_summary *s, uint32_t size) | 95 | int jffs2_sum_add_padding_mem(struct jffs2_summary *s, uint32_t size) |
| 95 | { | 96 | { |
| 96 | JFFS2_DBG_SUMMARY("called with %u\n", size); | 97 | dbg_summary("called with %u\n", size); |
| 97 | s->sum_padded += size; | 98 | s->sum_padded += size; |
| 98 | return 0; | 99 | return 0; |
| 99 | } | 100 | } |
| @@ -147,7 +148,7 @@ static void jffs2_sum_clean_collected(struct jffs2_summary *s) | |||
| 147 | union jffs2_sum_mem *temp; | 148 | union jffs2_sum_mem *temp; |
| 148 | 149 | ||
| 149 | if (!s->sum_list_head) { | 150 | if (!s->sum_list_head) { |
| 150 | JFFS2_DBG_SUMMARY("already empty\n"); | 151 | dbg_summary("already empty\n"); |
| 151 | } | 152 | } |
| 152 | while (s->sum_list_head) { | 153 | while (s->sum_list_head) { |
| 153 | temp = s->sum_list_head; | 154 | temp = s->sum_list_head; |
| @@ -161,14 +162,14 @@ static void jffs2_sum_clean_collected(struct jffs2_summary *s) | |||
| 161 | 162 | ||
| 162 | void jffs2_sum_reset_collected(struct jffs2_summary *s) | 163 | void jffs2_sum_reset_collected(struct jffs2_summary *s) |
| 163 | { | 164 | { |
| 164 | JFFS2_DBG_SUMMARY("called\n"); | 165 | dbg_summary("called\n"); |
| 165 | jffs2_sum_clean_collected(s); | 166 | jffs2_sum_clean_collected(s); |
| 166 | s->sum_size = 0; | 167 | s->sum_size = 0; |
| 167 | } | 168 | } |
| 168 | 169 | ||
| 169 | void jffs2_sum_disable_collecting(struct jffs2_summary *s) | 170 | void jffs2_sum_disable_collecting(struct jffs2_summary *s) |
| 170 | { | 171 | { |
| 171 | JFFS2_DBG_SUMMARY("called\n"); | 172 | dbg_summary("called\n"); |
| 172 | jffs2_sum_clean_collected(s); | 173 | jffs2_sum_clean_collected(s); |
| 173 | s->sum_size = JFFS2_SUMMARY_NOSUM_SIZE; | 174 | s->sum_size = JFFS2_SUMMARY_NOSUM_SIZE; |
| 174 | } | 175 | } |
| @@ -182,7 +183,7 @@ int jffs2_sum_is_disabled(struct jffs2_summary *s) | |||
| 182 | 183 | ||
| 183 | void jffs2_sum_move_collected(struct jffs2_sb_info *c, struct jffs2_summary *s) | 184 | void jffs2_sum_move_collected(struct jffs2_sb_info *c, struct jffs2_summary *s) |
| 184 | { | 185 | { |
| 185 | JFFS2_DBG_SUMMARY("oldsize=0x%x oldnum=%u => newsize=0x%x newnum=%u\n", | 186 | dbg_summary("oldsize=0x%x oldnum=%u => newsize=0x%x newnum=%u\n", |
| 186 | c->summary->sum_size, c->summary->sum_num, | 187 | c->summary->sum_size, c->summary->sum_num, |
| 187 | s->sum_size, s->sum_num); | 188 | s->sum_size, s->sum_num); |
| 188 | 189 | ||
| @@ -260,16 +261,16 @@ int jffs2_sum_add_kvec(struct jffs2_sb_info *c, const struct kvec *invecs, | |||
| 260 | } | 261 | } |
| 261 | 262 | ||
| 262 | case JFFS2_NODETYPE_PADDING: | 263 | case JFFS2_NODETYPE_PADDING: |
| 263 | JFFS2_DBG_SUMMARY("node PADDING\n"); | 264 | dbg_summary("node PADDING\n"); |
| 264 | c->summary->sum_padded += je32_to_cpu(node->u.totlen); | 265 | c->summary->sum_padded += je32_to_cpu(node->u.totlen); |
| 265 | break; | 266 | break; |
| 266 | 267 | ||
| 267 | case JFFS2_NODETYPE_CLEANMARKER: | 268 | case JFFS2_NODETYPE_CLEANMARKER: |
| 268 | JFFS2_DBG_SUMMARY("node CLEANMARKER\n"); | 269 | dbg_summary("node CLEANMARKER\n"); |
| 269 | break; | 270 | break; |
| 270 | 271 | ||
| 271 | case JFFS2_NODETYPE_SUMMARY: | 272 | case JFFS2_NODETYPE_SUMMARY: |
| 272 | JFFS2_DBG_SUMMARY("node SUMMARY\n"); | 273 | dbg_summary("node SUMMARY\n"); |
| 273 | break; | 274 | break; |
| 274 | 275 | ||
| 275 | default: | 276 | default: |
| @@ -302,7 +303,7 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras | |||
| 302 | sp = summary->sum; | 303 | sp = summary->sum; |
| 303 | 304 | ||
| 304 | for (i=0; i<je32_to_cpu(summary->sum_num); i++) { | 305 | for (i=0; i<je32_to_cpu(summary->sum_num); i++) { |
| 305 | JFFS2_DBG_SUMMARY("processing summary index %d\n", i); | 306 | dbg_summary("processing summary index %d\n", i); |
| 306 | 307 | ||
| 307 | switch (je16_to_cpu(((struct jffs2_sum_unknown_flash *)sp)->nodetype)) { | 308 | switch (je16_to_cpu(((struct jffs2_sum_unknown_flash *)sp)->nodetype)) { |
| 308 | case JFFS2_NODETYPE_INODE: { | 309 | case JFFS2_NODETYPE_INODE: { |
| @@ -311,7 +312,7 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras | |||
| 311 | 312 | ||
| 312 | ino = je32_to_cpu(spi->inode); | 313 | ino = je32_to_cpu(spi->inode); |
| 313 | 314 | ||
| 314 | JFFS2_DBG_SUMMARY("Inode at 0x%08x\n", | 315 | dbg_summary("Inode at 0x%08x\n", |
| 315 | jeb->offset + je32_to_cpu(spi->offset)); | 316 | jeb->offset + je32_to_cpu(spi->offset)); |
| 316 | 317 | ||
| 317 | raw = jffs2_alloc_raw_node_ref(); | 318 | 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 | |||
| 353 | struct jffs2_sum_dirent_flash *spd; | 354 | struct jffs2_sum_dirent_flash *spd; |
| 354 | spd = sp; | 355 | spd = sp; |
| 355 | 356 | ||
| 356 | JFFS2_DBG_SUMMARY("Dirent at 0x%08x\n", | 357 | dbg_summary("Dirent at 0x%08x\n", |
| 357 | jeb->offset + je32_to_cpu(spd->offset)); | 358 | jeb->offset + je32_to_cpu(spd->offset)); |
| 358 | 359 | ||
| 359 | fd = jffs2_alloc_full_dirent(spd->nsize+1); | 360 | 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 | |||
| 434 | sumsize = c->sector_size - ofs; | 435 | sumsize = c->sector_size - ofs; |
| 435 | ofs += jeb->offset; | 436 | ofs += jeb->offset; |
| 436 | 437 | ||
| 437 | JFFS2_DBG_SUMMARY("summary found for 0x%08x at 0x%08x (0x%x bytes)\n", | 438 | dbg_summary("summary found for 0x%08x at 0x%08x (0x%x bytes)\n", |
| 438 | jeb->offset, ofs, sumsize); | 439 | jeb->offset, ofs, sumsize); |
| 439 | 440 | ||
| 440 | summary = kmalloc(sumsize, GFP_KERNEL); | 441 | summary = kmalloc(sumsize, GFP_KERNEL); |
| @@ -457,40 +458,40 @@ int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb | |||
| 457 | crc = crc32(0, &crcnode, sizeof(crcnode)-4); | 458 | crc = crc32(0, &crcnode, sizeof(crcnode)-4); |
| 458 | 459 | ||
| 459 | if (je32_to_cpu(summary->hdr_crc) != crc) { | 460 | if (je32_to_cpu(summary->hdr_crc) != crc) { |
| 460 | JFFS2_DBG_SUMMARY("Summary node header is corrupt (bad CRC or " | 461 | dbg_summary("Summary node header is corrupt (bad CRC or " |
| 461 | "no summary at all)\n"); | 462 | "no summary at all)\n"); |
| 462 | goto crc_err; | 463 | goto crc_err; |
| 463 | } | 464 | } |
| 464 | 465 | ||
| 465 | if (je32_to_cpu(summary->totlen) != sumsize) { | 466 | if (je32_to_cpu(summary->totlen) != sumsize) { |
| 466 | JFFS2_DBG_SUMMARY("Summary node is corrupt (wrong erasesize?)\n"); | 467 | dbg_summary("Summary node is corrupt (wrong erasesize?)\n"); |
| 467 | goto crc_err; | 468 | goto crc_err; |
| 468 | } | 469 | } |
| 469 | 470 | ||
| 470 | crc = crc32(0, summary, sizeof(struct jffs2_summary_node)-8); | 471 | crc = crc32(0, summary, sizeof(struct jffs2_summary_node)-8); |
| 471 | 472 | ||
| 472 | if (je32_to_cpu(summary->node_crc) != crc) { | 473 | if (je32_to_cpu(summary->node_crc) != crc) { |
| 473 | JFFS2_DBG_SUMMARY("Summary node is corrupt (bad CRC)\n"); | 474 | dbg_summary("Summary node is corrupt (bad CRC)\n"); |
| 474 | goto crc_err; | 475 | goto crc_err; |
| 475 | } | 476 | } |
| 476 | 477 | ||
| 477 | crc = crc32(0, summary->sum, sumsize - sizeof(struct jffs2_summary_node)); | 478 | crc = crc32(0, summary->sum, sumsize - sizeof(struct jffs2_summary_node)); |
| 478 | 479 | ||
| 479 | if (je32_to_cpu(summary->sum_crc) != crc) { | 480 | if (je32_to_cpu(summary->sum_crc) != crc) { |
| 480 | JFFS2_DBG_SUMMARY("Summary node data is corrupt (bad CRC)\n"); | 481 | dbg_summary("Summary node data is corrupt (bad CRC)\n"); |
| 481 | goto crc_err; | 482 | goto crc_err; |
| 482 | } | 483 | } |
| 483 | 484 | ||
| 484 | if ( je32_to_cpu(summary->cln_mkr) ) { | 485 | if ( je32_to_cpu(summary->cln_mkr) ) { |
| 485 | 486 | ||
| 486 | JFFS2_DBG_SUMMARY("Summary : CLEANMARKER node \n"); | 487 | dbg_summary("Summary : CLEANMARKER node \n"); |
| 487 | 488 | ||
| 488 | if (je32_to_cpu(summary->cln_mkr) != c->cleanmarker_size) { | 489 | if (je32_to_cpu(summary->cln_mkr) != c->cleanmarker_size) { |
| 489 | JFFS2_DBG_SUMMARY("CLEANMARKER node has totlen 0x%x != normal 0x%x\n", | 490 | dbg_summary("CLEANMARKER node has totlen 0x%x != normal 0x%x\n", |
| 490 | je32_to_cpu(summary->cln_mkr), c->cleanmarker_size); | 491 | je32_to_cpu(summary->cln_mkr), c->cleanmarker_size); |
| 491 | UNCHECKED_SPACE(PAD(je32_to_cpu(summary->cln_mkr))); | 492 | UNCHECKED_SPACE(PAD(je32_to_cpu(summary->cln_mkr))); |
| 492 | } else if (jeb->first_node) { | 493 | } else if (jeb->first_node) { |
| 493 | JFFS2_DBG_SUMMARY("CLEANMARKER node not first node in block " | 494 | dbg_summary("CLEANMARKER node not first node in block " |
| 494 | "(0x%08x)\n", jeb->offset); | 495 | "(0x%08x)\n", jeb->offset); |
| 495 | UNCHECKED_SPACE(PAD(je32_to_cpu(summary->cln_mkr))); | 496 | UNCHECKED_SPACE(PAD(je32_to_cpu(summary->cln_mkr))); |
| 496 | } else { | 497 | } else { |
| @@ -644,7 +645,7 @@ static int jffs2_sum_write_data(struct jffs2_sb_info *c, struct jffs2_eraseblock | |||
| 644 | vecs[1].iov_base = c->summary->sum_buf; | 645 | vecs[1].iov_base = c->summary->sum_buf; |
| 645 | vecs[1].iov_len = datasize; | 646 | vecs[1].iov_len = datasize; |
| 646 | 647 | ||
| 647 | JFFS2_DBG_SUMMARY("JFFS2: writing out data to flash to pos : 0x%08x\n", | 648 | dbg_summary("JFFS2: writing out data to flash to pos : 0x%08x\n", |
| 648 | jeb->offset + c->sector_size - jeb->free_size); | 649 | jeb->offset + c->sector_size - jeb->free_size); |
| 649 | 650 | ||
| 650 | spin_unlock(&c->erase_completion_lock); | 651 | spin_unlock(&c->erase_completion_lock); |
| @@ -674,7 +675,7 @@ int jffs2_sum_write_sumnode(struct jffs2_sb_info *c) | |||
| 674 | int datasize, infosize, padsize, ret; | 675 | int datasize, infosize, padsize, ret; |
| 675 | struct jffs2_eraseblock *jeb; | 676 | struct jffs2_eraseblock *jeb; |
| 676 | 677 | ||
| 677 | JFFS2_DBG_SUMMARY("called\n"); | 678 | dbg_summary("called\n"); |
| 678 | 679 | ||
| 679 | jeb = c->nextblock; | 680 | jeb = c->nextblock; |
| 680 | 681 | ||
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c index 86860dbc67..11e05bc014 100644 --- a/fs/jffs2/wbuf.c +++ b/fs/jffs2/wbuf.c | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | * | 9 | * |
| 10 | * For licensing information, see the file 'LICENCE' in this directory. | 10 | * For licensing information, see the file 'LICENCE' in this directory. |
| 11 | * | 11 | * |
| 12 | * $Id: wbuf.c,v 1.98 2005/09/07 08:34:55 havasi Exp $ | 12 | * $Id: wbuf.c,v 1.99 2005/09/21 16:11:04 dedekind Exp $ |
| 13 | * | 13 | * |
| 14 | */ | 14 | */ |
| 15 | 15 | ||
| @@ -33,9 +33,6 @@ static unsigned char *brokenbuf; | |||
| 33 | /* max. erase failures before we mark a block bad */ | 33 | /* max. erase failures before we mark a block bad */ |
| 34 | #define MAX_ERASE_FAILURES 2 | 34 | #define MAX_ERASE_FAILURES 2 |
| 35 | 35 | ||
| 36 | /* two seconds timeout for timed wbuf-flushing */ | ||
| 37 | #define WBUF_FLUSH_TIMEOUT 2 * HZ | ||
| 38 | |||
| 39 | struct jffs2_inodirty { | 36 | struct jffs2_inodirty { |
| 40 | uint32_t ino; | 37 | uint32_t ino; |
| 41 | struct jffs2_inodirty *next; | 38 | struct jffs2_inodirty *next; |
