mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
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: Kent Overstreet <kmo@daterainc.com>
This commit is contained in:
parent
b3fa7e77e6
commit
5775e2133d
@ -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,9 +690,12 @@ 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)) {
|
||||
trace_bcache_journal_entry_full(c);
|
||||
if (wait)
|
||||
trace_bcache_journal_entry_full(c);
|
||||
|
||||
/*
|
||||
* XXX: If we were inserting so many keys that they
|
||||
@ -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 {
|
||||
trace_bcache_journal_full(c);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user