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

Commit 5775e213 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcache: Performance fix for when journal entry is full



We were unnecessarily waiting on a journal write to complete when we just needed
to start a journal write and start setting up the next one.

Signed-off-by: default avatarKent Overstreet <kmo@daterainc.com>
parent b3fa7e77
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -673,6 +673,7 @@ static struct journal_write *journal_wait_for_write(struct cache_set *c,
{
	size_t sectors;
	struct closure cl;
	bool wait = false;

	closure_init_stack(&cl);

@@ -689,8 +690,11 @@ static struct journal_write *journal_wait_for_write(struct cache_set *c,
				     PAGE_SECTORS << JSET_BITS))
			return w;

		/* XXX: tracepoint */
		if (wait)
			closure_wait(&c->journal.wait, &cl);

		if (!journal_full(&c->journal)) {
			if (wait)
				trace_bcache_journal_entry_full(c);

			/*
@@ -701,12 +705,11 @@ static struct journal_write *journal_wait_for_write(struct cache_set *c,
			 */
			BUG_ON(!w->data->keys);

			closure_wait(&w->wait, &cl);
			journal_try_write(c); /* unlocks */
		} else {
			if (wait)
				trace_bcache_journal_full(c);

			closure_wait(&c->journal.wait, &cl);
			journal_reclaim(c);
			spin_unlock(&c->journal.lock);

@@ -715,6 +718,7 @@ static struct journal_write *journal_wait_for_write(struct cache_set *c,

		closure_sync(&cl);
		spin_lock(&c->journal.lock);
		wait = true;
	}
}