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

jffs2: Require jffs2_garbage_collect_trigger() to be called with lock held

We're about to call this from a bunch of places which already hold
c->erase_completion_lock, so add an assertion and change its existing
callers to do the same.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

+5 -2
+1 -2
fs/jffs2/background.c
··· 23 23 24 24 void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c) 25 25 { 26 - spin_lock(&c->erase_completion_lock); 26 + assert_spin_locked(&c->erase_completion_lock); 27 27 if (c->gc_task && jffs2_thread_should_wake(c)) 28 28 send_sig(SIGHUP, c->gc_task, 1); 29 - spin_unlock(&c->erase_completion_lock); 30 29 } 31 30 32 31 /* This must only ever be called when no GC thread is currently running */
+2
fs/jffs2/nodemgmt.c
··· 481 481 void jffs2_complete_reservation(struct jffs2_sb_info *c) 482 482 { 483 483 D1(printk(KERN_DEBUG "jffs2_complete_reservation()\n")); 484 + spin_lock(&c->erase_completion_lock); 484 485 jffs2_garbage_collect_trigger(c); 486 + spin_unlock(&c->erase_completion_lock); 485 487 mutex_unlock(&c->alloc_sem); 486 488 } 487 489
+2
fs/jffs2/super.c
··· 63 63 64 64 if (!(sb->s_flags & MS_RDONLY)) { 65 65 D1(printk(KERN_DEBUG "jffs2_write_super()\n")); 66 + spin_lock(&c->erase_completion_lock); 66 67 jffs2_garbage_collect_trigger(c); 68 + spin_unlock(&c->erase_completion_lock); 67 69 jffs2_erase_pending_blocks(c, 0); 68 70 jffs2_flush_wbuf_gc(c, 0); 69 71 }