summaryrefslogtreecommitdiffstats
path: root/fs/jffs2
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2006-05-25 02:50:35 +0200
committerDavid Woodhouse <dwmw2@infradead.org>2006-05-25 02:50:35 +0200
commit046b8b9808127d63326a33bc6298c90eaee90eeb (patch)
tree93caaabd7ae10969acb4758634b9b1c9448ef951 /fs/jffs2
parent[JFFS2] Correctly handle wasted space before summary node. (diff)
downloadlinux-046b8b9808127d63326a33bc6298c90eaee90eeb.tar.xz
linux-046b8b9808127d63326a33bc6298c90eaee90eeb.zip
[JFFS2] Add 'jeb' argument to jffs2_prealloc_raw_node_refs()
Preallocation of refs is shortly going to be a per-eraseblock thing, rather than per-filesystem. Add the required argument to the function. Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'fs/jffs2')
-rw-r--r--fs/jffs2/erase.c2
-rw-r--r--fs/jffs2/malloc.c3
-rw-r--r--fs/jffs2/nodelist.h3
-rw-r--r--fs/jffs2/nodemgmt.c4
-rw-r--r--fs/jffs2/scan.c4
-rw-r--r--fs/jffs2/summary.c6
-rw-r--r--fs/jffs2/wbuf.c8
7 files changed, 16 insertions, 14 deletions
diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c
index aea58ee64d23..c8386b256831 100644
--- a/fs/jffs2/erase.c
+++ b/fs/jffs2/erase.c
@@ -383,7 +383,7 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb
.totlen = cpu_to_je32(c->cleanmarker_size)
};
- jffs2_prealloc_raw_node_refs(c, 1);
+ jffs2_prealloc_raw_node_refs(c, jeb, 1);
marker.hdr_crc = cpu_to_je32(crc32(0, &marker, sizeof(struct jffs2_unknown_node)-4));
diff --git a/fs/jffs2/malloc.c b/fs/jffs2/malloc.c
index 3df3250314a2..171483ef0e4d 100644
--- a/fs/jffs2/malloc.c
+++ b/fs/jffs2/malloc.c
@@ -190,7 +190,8 @@ void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x)
kmem_cache_free(tmp_dnode_info_slab, x);
}
-int jffs2_prealloc_raw_node_refs(struct jffs2_sb_info *c, int nr)
+int jffs2_prealloc_raw_node_refs(struct jffs2_sb_info *c,
+ struct jffs2_eraseblock *jeb, int nr)
{
struct jffs2_raw_node_ref *p = c->refs;
diff --git a/fs/jffs2/nodelist.h b/fs/jffs2/nodelist.h
index 21b0b7b6c75f..6c92dc46fe9e 100644
--- a/fs/jffs2/nodelist.h
+++ b/fs/jffs2/nodelist.h
@@ -378,7 +378,8 @@ struct jffs2_raw_inode *jffs2_alloc_raw_inode(void);
void jffs2_free_raw_inode(struct jffs2_raw_inode *);
struct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void);
void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *);
-int jffs2_prealloc_raw_node_refs(struct jffs2_sb_info *c, int nr);
+int jffs2_prealloc_raw_node_refs(struct jffs2_sb_info *c,
+ struct jffs2_eraseblock *jeb, int nr);
struct jffs2_raw_node_ref *__jffs2_alloc_raw_node_ref(void);
void __jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *);
struct jffs2_node_frag *jffs2_alloc_node_frag(void);
diff --git a/fs/jffs2/nodemgmt.c b/fs/jffs2/nodemgmt.c
index bbc873e20807..73a06d01db48 100644
--- a/fs/jffs2/nodemgmt.c
+++ b/fs/jffs2/nodemgmt.c
@@ -138,7 +138,7 @@ int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize,
}
spin_unlock(&c->erase_completion_lock);
if (!ret)
- ret = jffs2_prealloc_raw_node_refs(c, 1);
+ ret = jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
if (ret)
up(&c->alloc_sem);
return ret;
@@ -161,7 +161,7 @@ int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize,
}
spin_unlock(&c->erase_completion_lock);
if (!ret)
- ret = jffs2_prealloc_raw_node_refs(c, 1);
+ ret = jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
return ret;
}
diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c
index c25750aa85e3..5bbd4a36c75e 100644
--- a/fs/jffs2/scan.c
+++ b/fs/jffs2/scan.c
@@ -244,7 +244,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
D1(printk(KERN_DEBUG "jffs2_scan_medium(): Skipping %d bytes in nextblock to ensure page alignment\n",
skip));
- jffs2_prealloc_raw_node_refs(c, 1);
+ jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
jffs2_scan_dirty_space(c, c->nextblock, skip);
}
#endif
@@ -576,7 +576,7 @@ scan_more:
jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
/* Make sure there are node refs available for use */
- err = jffs2_prealloc_raw_node_refs(c, 2);
+ err = jffs2_prealloc_raw_node_refs(c, jeb, 2);
if (err)
return err;
diff --git a/fs/jffs2/summary.c b/fs/jffs2/summary.c
index 0c66d16eaa22..a60bbcea5b7f 100644
--- a/fs/jffs2/summary.c
+++ b/fs/jffs2/summary.c
@@ -400,7 +400,7 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras
dbg_summary("processing summary index %d\n", i);
/* Make sure there's a spare ref for dirty space */
- err = jffs2_prealloc_raw_node_refs(c, 2);
+ err = jffs2_prealloc_raw_node_refs(c, jeb, 2);
if (err)
return err;
@@ -630,7 +630,7 @@ int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb
return ret; /* real error */
/* for PARANOIA_CHECK */
- ret = jffs2_prealloc_raw_node_refs(c, 2);
+ ret = jffs2_prealloc_raw_node_refs(c, jeb, 2);
if (ret)
return ret;
@@ -815,9 +815,9 @@ int jffs2_sum_write_sumnode(struct jffs2_sb_info *c)
dbg_summary("called\n");
spin_unlock(&c->erase_completion_lock);
- jffs2_prealloc_raw_node_refs(c, 1);
jeb = c->nextblock;
+ jffs2_prealloc_raw_node_refs(c, jeb, 1);
if (!c->summary->sum_num || !c->summary->sum_list_head) {
JFFS2_WARNING("Empty summary info!!!\n");
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
index 1871140e1e78..e16e45ea0474 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -179,13 +179,13 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
unsigned char *buf;
uint32_t start, end, ofs, len;
- if (jffs2_prealloc_raw_node_refs(c, c->reserved_refs + 1))
+ jeb = &c->blocks[c->wbuf_ofs / c->sector_size];
+
+ if (jffs2_prealloc_raw_node_refs(c, jeb, c->reserved_refs + 1))
return;
spin_lock(&c->erase_completion_lock);
- jeb = &c->blocks[c->wbuf_ofs / c->sector_size];
-
jffs2_block_refile(c, jeb, REFILE_NOTEMPTY);
/* Find the first node to be recovered, by skipping over every
@@ -417,7 +417,7 @@ static int __jffs2_flush_wbuf(struct jffs2_sb_info *c, int pad)
if (!c->wbuf_len) /* already checked c->wbuf above */
return 0;
- if (jffs2_prealloc_raw_node_refs(c, c->reserved_refs + 1))
+ if (jffs2_prealloc_raw_node_refs(c, c->nextblock, c->reserved_refs + 1))
return -ENOMEM;
/* claim remaining space on the page