Commit ae3b6ba06c8ed399ef920724ee8136e540878294

Authored by David Woodhouse
1 parent acb64a43e4

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

... ... @@ -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);
... ... @@ -448,7 +448,7 @@
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  
... ... @@ -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. */
... ... @@ -260,7 +260,9 @@
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:
... ... @@ -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);