Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acb64a43 authored by David Woodhouse's avatar David Woodhouse
Browse files

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: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent d6ce1710
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -23,10 +23,9 @@ static int jffs2_garbage_collect_thread(void *);

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))
		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 */
+2 −0
Original line number Diff line number Diff line
@@ -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)
{
	D1(printk(KERN_DEBUG "jffs2_complete_reservation()\n"));
	spin_lock(&c->erase_completion_lock);
	jffs2_garbage_collect_trigger(c);
	spin_unlock(&c->erase_completion_lock);
	mutex_unlock(&c->alloc_sem);
}

+2 −0
Original line number Diff line number Diff line
@@ -63,7 +63,9 @@ static void jffs2_write_super(struct super_block *sb)

	if (!(sb->s_flags & MS_RDONLY)) {
		D1(printk(KERN_DEBUG "jffs2_write_super()\n"));
		spin_lock(&c->erase_completion_lock);
		jffs2_garbage_collect_trigger(c);
		spin_unlock(&c->erase_completion_lock);
		jffs2_erase_pending_blocks(c, 0);
		jffs2_flush_wbuf_gc(c, 0);
	}