Commit ae3b6ba0 authored by David Woodhouse's avatar David Woodhouse

jffs2: Use jffs2_garbage_collect_trigger() to trigger pending erases

This is now done in a GC pass; we don't need to trigger kupdated to do it.
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent acb64a43
...@@ -168,10 +168,10 @@ static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblo ...@@ -168,10 +168,10 @@ static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblo
mutex_lock(&c->erase_free_sem); mutex_lock(&c->erase_free_sem);
spin_lock(&c->erase_completion_lock); spin_lock(&c->erase_completion_lock);
list_move_tail(&jeb->list, &c->erase_complete_list); list_move_tail(&jeb->list, &c->erase_complete_list);
/* Wake the GC thread to mark them clean */
jffs2_garbage_collect_trigger(c);
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
mutex_unlock(&c->erase_free_sem); mutex_unlock(&c->erase_free_sem);
/* Ensure that kupdated calls us again to mark them clean */
jffs2_erase_pending_trigger(c);
wake_up(&c->erase_wait); wake_up(&c->erase_wait);
} }
...@@ -491,9 +491,9 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb ...@@ -491,9 +491,9 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb
refile: refile:
/* Stick it back on the list from whence it came and come back later */ /* Stick it back on the list from whence it came and come back later */
jffs2_erase_pending_trigger(c);
mutex_lock(&c->erase_free_sem); mutex_lock(&c->erase_free_sem);
spin_lock(&c->erase_completion_lock); spin_lock(&c->erase_completion_lock);
jffs2_garbage_collect_trigger(c);
list_move(&jeb->list, &c->erase_complete_list); list_move(&jeb->list, &c->erase_complete_list);
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
mutex_unlock(&c->erase_free_sem); mutex_unlock(&c->erase_free_sem);
......
...@@ -448,7 +448,7 @@ int jffs2_garbage_collect_pass(struct jffs2_sb_info *c) ...@@ -448,7 +448,7 @@ int jffs2_garbage_collect_pass(struct jffs2_sb_info *c)
list_add_tail(&c->gcblock->list, &c->erase_pending_list); list_add_tail(&c->gcblock->list, &c->erase_pending_list);
c->gcblock = NULL; c->gcblock = NULL;
c->nr_erasing_blocks++; c->nr_erasing_blocks++;
jffs2_erase_pending_trigger(c); jffs2_garbage_collect_trigger(c);
} }
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
......
...@@ -229,7 +229,7 @@ static int jffs2_find_nextblock(struct jffs2_sb_info *c) ...@@ -229,7 +229,7 @@ static int jffs2_find_nextblock(struct jffs2_sb_info *c)
ejeb = list_entry(c->erasable_list.next, struct jffs2_eraseblock, list); ejeb = list_entry(c->erasable_list.next, struct jffs2_eraseblock, list);
list_move_tail(&ejeb->list, &c->erase_pending_list); list_move_tail(&ejeb->list, &c->erase_pending_list);
c->nr_erasing_blocks++; c->nr_erasing_blocks++;
jffs2_erase_pending_trigger(c); jffs2_garbage_collect_trigger(c);
D1(printk(KERN_DEBUG "jffs2_find_nextblock: Triggering erase of erasable block at 0x%08x\n", D1(printk(KERN_DEBUG "jffs2_find_nextblock: Triggering erase of erasable block at 0x%08x\n",
ejeb->offset)); ejeb->offset));
} }
...@@ -625,7 +625,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -625,7 +625,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n")); D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n"));
list_add_tail(&jeb->list, &c->erase_pending_list); list_add_tail(&jeb->list, &c->erase_pending_list);
c->nr_erasing_blocks++; c->nr_erasing_blocks++;
jffs2_erase_pending_trigger(c); jffs2_garbage_collect_trigger(c);
} else { } else {
/* Sometimes, however, we leave it elsewhere so it doesn't get /* Sometimes, however, we leave it elsewhere so it doesn't get
immediately reused, and we spread the load a bit. */ immediately reused, and we spread the load a bit. */
......
...@@ -260,7 +260,9 @@ int jffs2_scan_medium(struct jffs2_sb_info *c) ...@@ -260,7 +260,9 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
ret = -EIO; ret = -EIO;
goto out; goto out;
} }
jffs2_erase_pending_trigger(c); spin_lock(&c->erase_completion_lock);
jffs2_garbage_collect_trigger(c);
spin_unlock(&c->erase_completion_lock);
} }
ret = 0; ret = 0;
out: out:
......
...@@ -121,7 +121,7 @@ static inline void jffs2_refile_wbuf_blocks(struct jffs2_sb_info *c) ...@@ -121,7 +121,7 @@ static inline void jffs2_refile_wbuf_blocks(struct jffs2_sb_info *c)
D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n")); D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n"));
list_add_tail(&jeb->list, &c->erase_pending_list); list_add_tail(&jeb->list, &c->erase_pending_list);
c->nr_erasing_blocks++; c->nr_erasing_blocks++;
jffs2_erase_pending_trigger(c); jffs2_garbage_collect_trigger(c);
} else { } else {
/* Sometimes, however, we leave it elsewhere so it doesn't get /* Sometimes, however, we leave it elsewhere so it doesn't get
immediately reused, and we spread the load a bit. */ immediately reused, and we spread the load a bit. */
...@@ -152,7 +152,7 @@ static void jffs2_block_refile(struct jffs2_sb_info *c, struct jffs2_eraseblock ...@@ -152,7 +152,7 @@ static void jffs2_block_refile(struct jffs2_sb_info *c, struct jffs2_eraseblock
D1(printk("Refiling block at %08x to erase_pending_list\n", jeb->offset)); D1(printk("Refiling block at %08x to erase_pending_list\n", jeb->offset));
list_add(&jeb->list, &c->erase_pending_list); list_add(&jeb->list, &c->erase_pending_list);
c->nr_erasing_blocks++; c->nr_erasing_blocks++;
jffs2_erase_pending_trigger(c); jffs2_garbage_collect_trigger(c);
} }
if (!jffs2_prealloc_raw_node_refs(c, jeb, 1)) { if (!jffs2_prealloc_raw_node_refs(c, jeb, 1)) {
...@@ -543,7 +543,7 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c) ...@@ -543,7 +543,7 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
D1(printk(KERN_DEBUG "Failing block at %08x is now empty. Moving to erase_pending_list\n", jeb->offset)); D1(printk(KERN_DEBUG "Failing block at %08x is now empty. Moving to erase_pending_list\n", jeb->offset));
list_move(&jeb->list, &c->erase_pending_list); list_move(&jeb->list, &c->erase_pending_list);
c->nr_erasing_blocks++; c->nr_erasing_blocks++;
jffs2_erase_pending_trigger(c); jffs2_garbage_collect_trigger(c);
} }
jffs2_dbg_acct_sanity_check_nolock(c, jeb); jffs2_dbg_acct_sanity_check_nolock(c, jeb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment