]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
jffs2: Use jffs2_garbage_collect_trigger() to trigger pending erases
authorDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 19 May 2010 16:05:14 +0000 (17:05 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 19 May 2010 16:10:44 +0000 (17:10 +0100)
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>
fs/jffs2/erase.c
fs/jffs2/gc.c
fs/jffs2/nodemgmt.c
fs/jffs2/scan.c
fs/jffs2/wbuf.c

index 563c857ca5447d1ee5e831841f563ae1a99af11b..6286ad9b00f756c48b85283054ae078c910a1d23 100644 (file)
@@ -168,10 +168,10 @@ static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblo
        mutex_lock(&c->erase_free_sem);
        spin_lock(&c->erase_completion_lock);
        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);
        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);
 }
 
@@ -491,9 +491,9 @@ filebad:
 
 refile:
        /* 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);
        spin_lock(&c->erase_completion_lock);
+       jffs2_garbage_collect_trigger(c);
        list_move(&jeb->list, &c->erase_complete_list);
        spin_unlock(&c->erase_completion_lock);
        mutex_unlock(&c->erase_free_sem);
index 1ea4a843a43038bd68bfdb2ebbf40123d03fc976..f5e96bd656e85612d844952b01e9561a0b637419 100644 (file)
@@ -448,7 +448,7 @@ int jffs2_garbage_collect_pass(struct jffs2_sb_info *c)
                list_add_tail(&c->gcblock->list, &c->erase_pending_list);
                c->gcblock = NULL;
                c->nr_erasing_blocks++;
-               jffs2_erase_pending_trigger(c);
+               jffs2_garbage_collect_trigger(c);
        }
        spin_unlock(&c->erase_completion_lock);
 
index dd2d920d3325d2daabd76265f826542a2cdf1edd..694aa5b035057d5fa17ab8a475dfd41d0c9e681d 100644 (file)
@@ -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);
                        list_move_tail(&ejeb->list, &c->erase_pending_list);
                        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",
                                  ejeb->offset));
                }
@@ -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"));
                                list_add_tail(&jeb->list, &c->erase_pending_list);
                                c->nr_erasing_blocks++;
-                               jffs2_erase_pending_trigger(c);
+                               jffs2_garbage_collect_trigger(c);
                        } else {
                                /* Sometimes, however, we leave it elsewhere so it doesn't get
                                   immediately reused, and we spread the load a bit. */
index 696686cc206e1d807df1b6706a4a1a54f3f6b2bf..46f870d1cc36ffaca178be3e62c600186e23d7f6 100644 (file)
@@ -260,7 +260,9 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
                        ret = -EIO;
                        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;
  out:
index 5ef7bac265e5238495e7da7d8470fac62f922b66..be114beca13e9b096b38c5ace087b525c5c2bdd7 100644 (file)
@@ -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"));
                        list_add_tail(&jeb->list, &c->erase_pending_list);
                        c->nr_erasing_blocks++;
-                       jffs2_erase_pending_trigger(c);
+                       jffs2_garbage_collect_trigger(c);
                } else {
                        /* Sometimes, however, we leave it elsewhere so it doesn't get
                           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
                D1(printk("Refiling block at %08x to erase_pending_list\n", jeb->offset));
                list_add(&jeb->list, &c->erase_pending_list);
                c->nr_erasing_blocks++;
-               jffs2_erase_pending_trigger(c);
+               jffs2_garbage_collect_trigger(c);
        }
 
        if (!jffs2_prealloc_raw_node_refs(c, jeb, 1)) {
@@ -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));
                list_move(&jeb->list, &c->erase_pending_list);
                c->nr_erasing_blocks++;
-               jffs2_erase_pending_trigger(c);
+               jffs2_garbage_collect_trigger(c);
        }
 
        jffs2_dbg_acct_sanity_check_nolock(c, jeb);