summaryrefslogtreecommitdiff
path: root/libbcachefs/journal.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/journal.c')
-rw-r--r--libbcachefs/journal.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/libbcachefs/journal.c b/libbcachefs/journal.c
index ac1219fc..47cfd50d 100644
--- a/libbcachefs/journal.c
+++ b/libbcachefs/journal.c
@@ -462,7 +462,7 @@ u64 bch2_journal_last_unwritten_seq(struct journal *j)
int bch2_journal_open_seq_async(struct journal *j, u64 seq, struct closure *cl)
{
struct bch_fs *c = container_of(j, struct bch_fs, journal);
- bool need_reclaim = false;
+ int ret;
retry:
spin_lock(&j->lock);
@@ -490,14 +490,11 @@ retry:
BUG_ON(journal_cur_seq(j) < seq);
- if (!journal_entry_open(j)) {
- need_reclaim = true;
- goto blocked;
+ ret = journal_entry_open(j);
+ if (ret) {
+ spin_unlock(&j->lock);
+ return ret < 0 ? ret : 0;
}
-
- spin_unlock(&j->lock);
-
- return 0;
blocked:
if (!j->res_get_blocked_start)
j->res_get_blocked_start = local_clock() ?: 1;
@@ -505,8 +502,7 @@ blocked:
closure_wait(&j->async_wait, cl);
spin_unlock(&j->lock);
- if (need_reclaim)
- bch2_journal_reclaim_work(&j->reclaim_work.work);
+ bch2_journal_reclaim_work(&j->reclaim_work.work);
return -EAGAIN;
}