diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-07 16:40:18 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-07 16:41:50 -0400 |
commit | 147fb2ac5dc4f08c38c5011ea1a99c2298abb280 (patch) | |
tree | e83b4d0b8a980292b18e3ef505a92e28ae2b33c4 /libbcachefs/journal_io.c | |
parent | 51315289f249fa5569a776eaa98c7ee557b61077 (diff) |
Update bcachefs sources to 17baec961add fixup! bcachefs: opts.rebalance_on_ac_onlynoradtux-debug
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'libbcachefs/journal_io.c')
-rw-r--r-- | libbcachefs/journal_io.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/libbcachefs/journal_io.c b/libbcachefs/journal_io.c index e91c9848..c593d77d 100644 --- a/libbcachefs/journal_io.c +++ b/libbcachefs/journal_io.c @@ -19,6 +19,7 @@ #include <linux/ioprio.h> #include <linux/string_choices.h> +#include <linux/sched/sysctl.h> void bch2_journal_pos_from_member_info_set(struct bch_fs *c) { @@ -1263,7 +1264,8 @@ int bch2_journal_read(struct bch_fs *c, degraded = true; } - closure_sync(&jlist.cl); + while (closure_sync_timeout(&jlist.cl, sysctl_hung_task_timeout_secs * HZ / 2)) + ; if (jlist.ret) return jlist.ret; @@ -2045,15 +2047,6 @@ CLOSURE_CALLBACK(bch2_journal_write) j->write_start_time = local_clock(); - mutex_lock(&j->buf_lock); - journal_buf_realloc(j, w); - - ret = bch2_journal_write_prep(j, w); - mutex_unlock(&j->buf_lock); - - if (unlikely(ret)) - goto err; - spin_lock(&j->lock); if (nr_rw_members > 1) w->separate_flush = true; @@ -2064,6 +2057,15 @@ CLOSURE_CALLBACK(bch2_journal_write) if (unlikely(ret)) goto err; + mutex_lock(&j->buf_lock); + journal_buf_realloc(j, w); + + ret = bch2_journal_write_prep(j, w); + mutex_unlock(&j->buf_lock); + + if (unlikely(ret)) + goto err; + unsigned replicas_allocated = 0; while (1) { ret = journal_write_alloc(j, w, &replicas_allocated); |