Skip to content

Commit 3956ff8

Browse files
author
Kent Overstreet
committed
bcachefs: Don't use wait_event_interruptible() in recovery
Fix a bug where mount was failing with -ERESTARTSYS: koverstreet/bcachefs#741 We only want the interruptible wait when called from fsync. Signed-off-by: Kent Overstreet <[email protected]>
1 parent eb5db64 commit 3956ff8

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

fs/bcachefs/fs-io.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ static int bch2_flush_inode(struct bch_fs *c,
182182

183183
struct bch_inode_unpacked u;
184184
int ret = bch2_inode_find_by_inum(c, inode_inum(inode), &u) ?:
185-
bch2_journal_flush_seq(&c->journal, u.bi_journal_seq) ?:
185+
bch2_journal_flush_seq(&c->journal, u.bi_journal_seq, TASK_INTERRUPTIBLE) ?:
186186
bch2_inode_flush_nocow_writes(c, inode);
187187
bch2_write_ref_put(c, BCH_WRITE_REF_fsync);
188188
return ret;

fs/bcachefs/journal.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ int bch2_journal_flush_seq_async(struct journal *j, u64 seq,
758758
return ret;
759759
}
760760

761-
int bch2_journal_flush_seq(struct journal *j, u64 seq)
761+
int bch2_journal_flush_seq(struct journal *j, u64 seq, unsigned task_state)
762762
{
763763
u64 start_time = local_clock();
764764
int ret, ret2;
@@ -769,7 +769,9 @@ int bch2_journal_flush_seq(struct journal *j, u64 seq)
769769
if (seq <= j->flushed_seq_ondisk)
770770
return 0;
771771

772-
ret = wait_event_interruptible(j->wait, (ret2 = bch2_journal_flush_seq_async(j, seq, NULL)));
772+
ret = wait_event_state(j->wait,
773+
(ret2 = bch2_journal_flush_seq_async(j, seq, NULL)),
774+
task_state);
773775

774776
if (!ret)
775777
bch2_time_stats_update(j->flush_seq_time, start_time);
@@ -788,7 +790,7 @@ void bch2_journal_flush_async(struct journal *j, struct closure *parent)
788790

789791
int bch2_journal_flush(struct journal *j)
790792
{
791-
return bch2_journal_flush_seq(j, atomic64_read(&j->seq));
793+
return bch2_journal_flush_seq(j, atomic64_read(&j->seq), TASK_UNINTERRUPTIBLE);
792794
}
793795

794796
/*
@@ -851,7 +853,7 @@ int bch2_journal_meta(struct journal *j)
851853

852854
bch2_journal_res_put(j, &res);
853855

854-
return bch2_journal_flush_seq(j, res.seq);
856+
return bch2_journal_flush_seq(j, res.seq, TASK_UNINTERRUPTIBLE);
855857
}
856858

857859
/* block/unlock the journal: */

fs/bcachefs/journal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ void bch2_journal_entry_res_resize(struct journal *,
401401
int bch2_journal_flush_seq_async(struct journal *, u64, struct closure *);
402402
void bch2_journal_flush_async(struct journal *, struct closure *);
403403

404-
int bch2_journal_flush_seq(struct journal *, u64);
404+
int bch2_journal_flush_seq(struct journal *, u64, unsigned);
405405
int bch2_journal_flush(struct journal *);
406406
bool bch2_journal_noflush_seq(struct journal *, u64);
407407
int bch2_journal_meta(struct journal *);

0 commit comments

Comments
 (0)