mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 12:52:30 +00:00
[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>
This commit is contained in:
parent
f61579c337
commit
046b8b9808
@ -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)
|
.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));
|
marker.hdr_crc = cpu_to_je32(crc32(0, &marker, sizeof(struct jffs2_unknown_node)-4));
|
||||||
|
|
||||||
|
@ -190,7 +190,8 @@ void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x)
|
|||||||
kmem_cache_free(tmp_dnode_info_slab, 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;
|
struct jffs2_raw_node_ref *p = c->refs;
|
||||||
|
|
||||||
|
@ -378,7 +378,8 @@ struct jffs2_raw_inode *jffs2_alloc_raw_inode(void);
|
|||||||
void jffs2_free_raw_inode(struct jffs2_raw_inode *);
|
void jffs2_free_raw_inode(struct jffs2_raw_inode *);
|
||||||
struct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void);
|
struct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void);
|
||||||
void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *);
|
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);
|
struct jffs2_raw_node_ref *__jffs2_alloc_raw_node_ref(void);
|
||||||
void __jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *);
|
void __jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *);
|
||||||
struct jffs2_node_frag *jffs2_alloc_node_frag(void);
|
struct jffs2_node_frag *jffs2_alloc_node_frag(void);
|
||||||
|
@ -138,7 +138,7 @@ int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize,
|
|||||||
}
|
}
|
||||||
spin_unlock(&c->erase_completion_lock);
|
spin_unlock(&c->erase_completion_lock);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = jffs2_prealloc_raw_node_refs(c, 1);
|
ret = jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
|
||||||
if (ret)
|
if (ret)
|
||||||
up(&c->alloc_sem);
|
up(&c->alloc_sem);
|
||||||
return ret;
|
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);
|
spin_unlock(&c->erase_completion_lock);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = jffs2_prealloc_raw_node_refs(c, 1);
|
ret = jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -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",
|
D1(printk(KERN_DEBUG "jffs2_scan_medium(): Skipping %d bytes in nextblock to ensure page alignment\n",
|
||||||
skip));
|
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);
|
jffs2_scan_dirty_space(c, c->nextblock, skip);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -576,7 +576,7 @@ scan_more:
|
|||||||
jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
|
jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
|
||||||
|
|
||||||
/* Make sure there are node refs available for use */
|
/* 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)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -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);
|
dbg_summary("processing summary index %d\n", i);
|
||||||
|
|
||||||
/* Make sure there's a spare ref for dirty space */
|
/* 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)
|
if (err)
|
||||||
return 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 */
|
return ret; /* real error */
|
||||||
|
|
||||||
/* for PARANOIA_CHECK */
|
/* for PARANOIA_CHECK */
|
||||||
ret = jffs2_prealloc_raw_node_refs(c, 2);
|
ret = jffs2_prealloc_raw_node_refs(c, jeb, 2);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -815,9 +815,9 @@ int jffs2_sum_write_sumnode(struct jffs2_sb_info *c)
|
|||||||
dbg_summary("called\n");
|
dbg_summary("called\n");
|
||||||
|
|
||||||
spin_unlock(&c->erase_completion_lock);
|
spin_unlock(&c->erase_completion_lock);
|
||||||
jffs2_prealloc_raw_node_refs(c, 1);
|
|
||||||
|
|
||||||
jeb = c->nextblock;
|
jeb = c->nextblock;
|
||||||
|
jffs2_prealloc_raw_node_refs(c, jeb, 1);
|
||||||
|
|
||||||
if (!c->summary->sum_num || !c->summary->sum_list_head) {
|
if (!c->summary->sum_num || !c->summary->sum_list_head) {
|
||||||
JFFS2_WARNING("Empty summary info!!!\n");
|
JFFS2_WARNING("Empty summary info!!!\n");
|
||||||
|
@ -179,13 +179,13 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
|
|||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
uint32_t start, end, ofs, len;
|
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;
|
return;
|
||||||
|
|
||||||
spin_lock(&c->erase_completion_lock);
|
spin_lock(&c->erase_completion_lock);
|
||||||
|
|
||||||
jeb = &c->blocks[c->wbuf_ofs / c->sector_size];
|
|
||||||
|
|
||||||
jffs2_block_refile(c, jeb, REFILE_NOTEMPTY);
|
jffs2_block_refile(c, jeb, REFILE_NOTEMPTY);
|
||||||
|
|
||||||
/* Find the first node to be recovered, by skipping over every
|
/* 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 */
|
if (!c->wbuf_len) /* already checked c->wbuf above */
|
||||||
return 0;
|
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;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* claim remaining space on the page
|
/* claim remaining space on the page
|
||||||
|
Loading…
Reference in New Issue
Block a user