diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-02-12 16:02:38 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2021-02-12 16:02:52 -0500 |
commit | 868abec1ab5068dcab59fb8d7ad5e11b7bba89f3 (patch) | |
tree | 582d3cbf397a7023df9dfeca5f28dc8360c9d579 /libbcachefs/journal.c | |
parent | 612f6b9ab73c7f46e0254355b707d494a8ad9270 (diff) |
Update bcachefs sources to 5e73602f6c bcachefs: Fix for fsck hanging
Diffstat (limited to 'libbcachefs/journal.c')
-rw-r--r-- | libbcachefs/journal.c | 9 |
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, |