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>
This commit is contained in:
Родитель
d6ce171069
Коммит
acb64a43e4
|
@ -23,10 +23,9 @@ static int jffs2_garbage_collect_thread(void *);
|
||||||
|
|
||||||
void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c)
|
void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c)
|
||||||
{
|
{
|
||||||
spin_lock(&c->erase_completion_lock);
|
assert_spin_locked(&c->erase_completion_lock);
|
||||||
if (c->gc_task && jffs2_thread_should_wake(c))
|
if (c->gc_task && jffs2_thread_should_wake(c))
|
||||||
send_sig(SIGHUP, c->gc_task, 1);
|
send_sig(SIGHUP, c->gc_task, 1);
|
||||||
spin_unlock(&c->erase_completion_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This must only ever be called when no GC thread is currently running */
|
/* This must only ever be called when no GC thread is currently running */
|
||||||
|
|
|
@ -481,7 +481,9 @@ struct jffs2_raw_node_ref *jffs2_add_physical_node_ref(struct jffs2_sb_info *c,
|
||||||
void jffs2_complete_reservation(struct jffs2_sb_info *c)
|
void jffs2_complete_reservation(struct jffs2_sb_info *c)
|
||||||
{
|
{
|
||||||
D1(printk(KERN_DEBUG "jffs2_complete_reservation()\n"));
|
D1(printk(KERN_DEBUG "jffs2_complete_reservation()\n"));
|
||||||
|
spin_lock(&c->erase_completion_lock);
|
||||||
jffs2_garbage_collect_trigger(c);
|
jffs2_garbage_collect_trigger(c);
|
||||||
|
spin_unlock(&c->erase_completion_lock);
|
||||||
mutex_unlock(&c->alloc_sem);
|
mutex_unlock(&c->alloc_sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,9 @@ static void jffs2_write_super(struct super_block *sb)
|
||||||
|
|
||||||
if (!(sb->s_flags & MS_RDONLY)) {
|
if (!(sb->s_flags & MS_RDONLY)) {
|
||||||
D1(printk(KERN_DEBUG "jffs2_write_super()\n"));
|
D1(printk(KERN_DEBUG "jffs2_write_super()\n"));
|
||||||
|
spin_lock(&c->erase_completion_lock);
|
||||||
jffs2_garbage_collect_trigger(c);
|
jffs2_garbage_collect_trigger(c);
|
||||||
|
spin_unlock(&c->erase_completion_lock);
|
||||||
jffs2_erase_pending_blocks(c, 0);
|
jffs2_erase_pending_blocks(c, 0);
|
||||||
jffs2_flush_wbuf_gc(c, 0);
|
jffs2_flush_wbuf_gc(c, 0);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче