Commit ae3b6ba06c8ed399ef920724ee8136e540878294
1 parent
acb64a43e4
Exists in
master
and in
20 other branches
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: David Woodhouse <David.Woodhouse@intel.com>
Showing 5 changed files with 12 additions and 10 deletions Side-by-side Diff
fs/jffs2/erase.c
... | ... | @@ -168,10 +168,10 @@ |
168 | 168 | mutex_lock(&c->erase_free_sem); |
169 | 169 | spin_lock(&c->erase_completion_lock); |
170 | 170 | list_move_tail(&jeb->list, &c->erase_complete_list); |
171 | + /* Wake the GC thread to mark them clean */ | |
172 | + jffs2_garbage_collect_trigger(c); | |
171 | 173 | spin_unlock(&c->erase_completion_lock); |
172 | 174 | mutex_unlock(&c->erase_free_sem); |
173 | - /* Ensure that kupdated calls us again to mark them clean */ | |
174 | - jffs2_erase_pending_trigger(c); | |
175 | 175 | wake_up(&c->erase_wait); |
176 | 176 | } |
177 | 177 | |
178 | 178 | |
... | ... | @@ -491,9 +491,9 @@ |
491 | 491 | |
492 | 492 | refile: |
493 | 493 | /* Stick it back on the list from whence it came and come back later */ |
494 | - jffs2_erase_pending_trigger(c); | |
495 | 494 | mutex_lock(&c->erase_free_sem); |
496 | 495 | spin_lock(&c->erase_completion_lock); |
496 | + jffs2_garbage_collect_trigger(c); | |
497 | 497 | list_move(&jeb->list, &c->erase_complete_list); |
498 | 498 | spin_unlock(&c->erase_completion_lock); |
499 | 499 | mutex_unlock(&c->erase_free_sem); |
fs/jffs2/gc.c
fs/jffs2/nodemgmt.c
... | ... | @@ -229,7 +229,7 @@ |
229 | 229 | ejeb = list_entry(c->erasable_list.next, struct jffs2_eraseblock, list); |
230 | 230 | list_move_tail(&ejeb->list, &c->erase_pending_list); |
231 | 231 | c->nr_erasing_blocks++; |
232 | - jffs2_erase_pending_trigger(c); | |
232 | + jffs2_garbage_collect_trigger(c); | |
233 | 233 | D1(printk(KERN_DEBUG "jffs2_find_nextblock: Triggering erase of erasable block at 0x%08x\n", |
234 | 234 | ejeb->offset)); |
235 | 235 | } |
... | ... | @@ -625,7 +625,7 @@ |
625 | 625 | D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n")); |
626 | 626 | list_add_tail(&jeb->list, &c->erase_pending_list); |
627 | 627 | c->nr_erasing_blocks++; |
628 | - jffs2_erase_pending_trigger(c); | |
628 | + jffs2_garbage_collect_trigger(c); | |
629 | 629 | } else { |
630 | 630 | /* Sometimes, however, we leave it elsewhere so it doesn't get |
631 | 631 | immediately reused, and we spread the load a bit. */ |
fs/jffs2/scan.c
fs/jffs2/wbuf.c
... | ... | @@ -121,7 +121,7 @@ |
121 | 121 | D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n")); |
122 | 122 | list_add_tail(&jeb->list, &c->erase_pending_list); |
123 | 123 | c->nr_erasing_blocks++; |
124 | - jffs2_erase_pending_trigger(c); | |
124 | + jffs2_garbage_collect_trigger(c); | |
125 | 125 | } else { |
126 | 126 | /* Sometimes, however, we leave it elsewhere so it doesn't get |
127 | 127 | immediately reused, and we spread the load a bit. */ |
... | ... | @@ -152,7 +152,7 @@ |
152 | 152 | D1(printk("Refiling block at %08x to erase_pending_list\n", jeb->offset)); |
153 | 153 | list_add(&jeb->list, &c->erase_pending_list); |
154 | 154 | c->nr_erasing_blocks++; |
155 | - jffs2_erase_pending_trigger(c); | |
155 | + jffs2_garbage_collect_trigger(c); | |
156 | 156 | } |
157 | 157 | |
158 | 158 | if (!jffs2_prealloc_raw_node_refs(c, jeb, 1)) { |
... | ... | @@ -543,7 +543,7 @@ |
543 | 543 | D1(printk(KERN_DEBUG "Failing block at %08x is now empty. Moving to erase_pending_list\n", jeb->offset)); |
544 | 544 | list_move(&jeb->list, &c->erase_pending_list); |
545 | 545 | c->nr_erasing_blocks++; |
546 | - jffs2_erase_pending_trigger(c); | |
546 | + jffs2_garbage_collect_trigger(c); | |
547 | 547 | } |
548 | 548 | |
549 | 549 | jffs2_dbg_acct_sanity_check_nolock(c, jeb); |