mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-04 16:25:34 +00:00
bcachefs: Fix journal_reclaim_wait_done()
Can't run arbitrary code inside a wait_event() conditional, due to task state being weird... Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
1b9374adec
commit
0ef107859b
1 changed files with 5 additions and 19 deletions
|
@ -629,25 +629,11 @@ static inline int do_bch2_trans_commit(struct btree_trans *trans,
|
|||
|
||||
static int journal_reclaim_wait_done(struct bch_fs *c)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bch2_journal_error(&c->journal);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = !bch2_btree_key_cache_must_wait(c);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
journal_reclaim_kick(&c->journal);
|
||||
|
||||
if (mutex_trylock(&c->journal.reclaim_lock)) {
|
||||
ret = bch2_journal_reclaim(&c->journal);
|
||||
mutex_unlock(&c->journal.reclaim_lock);
|
||||
}
|
||||
int ret = bch2_journal_error(&c->journal) ?:
|
||||
!bch2_btree_key_cache_must_wait(c);
|
||||
|
||||
if (!ret)
|
||||
ret = !bch2_btree_key_cache_must_wait(c);
|
||||
journal_reclaim_kick(&c->journal);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -735,8 +721,8 @@ int bch2_trans_commit_error(struct btree_trans *trans,
|
|||
case BTREE_INSERT_NEED_JOURNAL_RECLAIM:
|
||||
bch2_trans_unlock(trans);
|
||||
|
||||
wait_event(c->journal.reclaim_wait,
|
||||
(ret = journal_reclaim_wait_done(c)));
|
||||
wait_event_freezable(c->journal.reclaim_wait,
|
||||
(ret = journal_reclaim_wait_done(c)));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue