Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+12 -10
+3 -3
fs/jffs2/erase.c
··· 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 ··· 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);
+1 -1
fs/jffs2/gc.c
··· 448 448 list_add_tail(&c->gcblock->list, &c->erase_pending_list); 449 449 c->gcblock = NULL; 450 450 c->nr_erasing_blocks++; 451 - jffs2_erase_pending_trigger(c); 451 + jffs2_garbage_collect_trigger(c); 452 452 } 453 453 spin_unlock(&c->erase_completion_lock); 454 454
+2 -2
fs/jffs2/nodemgmt.c
··· 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 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. */
+3 -1
fs/jffs2/scan.c
··· 260 260 ret = -EIO; 261 261 goto out; 262 262 } 263 - jffs2_erase_pending_trigger(c); 263 + spin_lock(&c->erase_completion_lock); 264 + jffs2_garbage_collect_trigger(c); 265 + spin_unlock(&c->erase_completion_lock); 264 266 } 265 267 ret = 0; 266 268 out:
+3 -3
fs/jffs2/wbuf.c
··· 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 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 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);