summaryrefslogtreecommitdiff
path: root/libbcachefs/journal.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-12-21 21:53:07 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2021-12-21 21:53:07 -0500
commit00f49f23b4c37865618c74a5cb3a65308a9c511d (patch)
tree4b7a8d9095d79ce164a87aaaec7892ca3a65ab7f /libbcachefs/journal.c
parent11e4e302de324450a802582660933ceb027431e7 (diff)
Update bcachefs sources to d3422f9b18 bcachefs: Journal initialization fixes
Diffstat (limited to 'libbcachefs/journal.c')
-rw-r--r--libbcachefs/journal.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/libbcachefs/journal.c b/libbcachefs/journal.c
index ff8b81f..40e7cb6 100644
--- a/libbcachefs/journal.c
+++ b/libbcachefs/journal.c
@@ -642,6 +642,7 @@ int bch2_journal_flush_seq(struct journal *j, u64 seq)
int bch2_journal_meta(struct journal *j)
{
+ struct journal_buf *buf;
struct journal_res res;
int ret;
@@ -651,6 +652,10 @@ int bch2_journal_meta(struct journal *j)
if (ret)
return ret;
+ buf = j->buf + (res.seq & JOURNAL_BUF_MASK);
+ buf->must_flush = true;
+ set_bit(JOURNAL_NEED_WRITE, &j->flags);
+
bch2_journal_res_put(j, &res);
return bch2_journal_flush_seq(j, res.seq);
@@ -995,6 +1000,7 @@ int bch2_fs_journal_start(struct journal *j, u64 cur_seq,
j->replay_journal_seq = last_seq;
j->replay_journal_seq_end = cur_seq;
j->last_seq_ondisk = last_seq;
+ j->flushed_seq_ondisk = last_seq;
j->pin.front = last_seq;
j->pin.back = cur_seq;
atomic64_set(&j->seq, cur_seq - 1);
@@ -1011,6 +1017,9 @@ int bch2_fs_journal_start(struct journal *j, u64 cur_seq,
if (seq < last_seq)
continue;
+ if (journal_entry_empty(&i->j))
+ j->last_empty_seq = le64_to_cpu(i->j.seq);
+
p = journal_seq_pin(j, seq);
p->devs.nr = 0;
@@ -1018,6 +1027,9 @@ int bch2_fs_journal_start(struct journal *j, u64 cur_seq,
bch2_dev_list_add_dev(&p->devs, i->ptrs[ptr].dev);
}
+ if (list_empty(journal_entries))
+ j->last_empty_seq = cur_seq;
+
spin_lock(&j->lock);
set_bit(JOURNAL_STARTED, &j->flags);