summaryrefslogtreecommitdiff
path: root/libbcachefs/journal.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-02-12 16:02:38 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2021-02-12 16:02:52 -0500
commit868abec1ab5068dcab59fb8d7ad5e11b7bba89f3 (patch)
tree582d3cbf397a7023df9dfeca5f28dc8360c9d579 /libbcachefs/journal.c
parent612f6b9ab73c7f46e0254355b707d494a8ad9270 (diff)
Update bcachefs sources to 5e73602f6c bcachefs: Fix for fsck hanging
Diffstat (limited to 'libbcachefs/journal.c')
-rw-r--r--libbcachefs/journal.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libbcachefs/journal.c b/libbcachefs/journal.c
index c4cb4f05..395021b5 100644
--- a/libbcachefs/journal.c
+++ b/libbcachefs/journal.c
@@ -575,6 +575,8 @@ int bch2_journal_flush_seq_async(struct journal *j, u64 seq,
spin_lock(&j->lock);
+ BUG_ON(seq > journal_cur_seq(j));
+
/* Recheck under lock: */
if (j->err_seq && seq >= j->err_seq) {
ret = -EIO;
@@ -640,9 +642,10 @@ int bch2_journal_flush_seq(struct journal *j, u64 seq)
u64 start_time = local_clock();
int ret, ret2;
- ret = wait_event_killable(j->wait, (ret2 = bch2_journal_flush_seq_async(j, seq, NULL)));
+ ret = wait_event_interruptible(j->wait, (ret2 = bch2_journal_flush_seq_async(j, seq, NULL)));
- bch2_time_stats_update(j->flush_seq_time, start_time);
+ if (!ret)
+ bch2_time_stats_update(j->flush_seq_time, start_time);
return ret ?: ret2 < 0 ? ret2 : 0;
}
@@ -1158,6 +1161,7 @@ void __bch2_journal_debug_to_text(struct printbuf *out, struct journal *j)
"seq:\t\t\t%llu\n"
"last_seq:\t\t%llu\n"
"last_seq_ondisk:\t%llu\n"
+ "flushed_seq_ondisk:\t%llu\n"
"prereserved:\t\t%u/%u\n"
"nr flush writes:\t%llu\n"
"nr noflush writes:\t%llu\n"
@@ -1170,6 +1174,7 @@ void __bch2_journal_debug_to_text(struct printbuf *out, struct journal *j)
journal_cur_seq(j),
journal_last_seq(j),
j->last_seq_ondisk,
+ j->flushed_seq_ondisk,
j->prereserved.reserved,
j->prereserved.remaining,
j->nr_flush_writes,