41 lines
1.3 KiB
Diff
41 lines
1.3 KiB
Diff
From effc7a1c0683576324bc3ef92d83e51091a8bca6 Mon Sep 17 00:00:00 2001
|
|
From: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Date: Wed, 4 Dec 2024 18:16:25 -0500
|
|
Subject: [PATCH 167/233] bcachefs: Fix failure to allocate journal write on
|
|
discard retry
|
|
Content-Type: text/plain; charset="utf-8"
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
When allocating a journal write fails, then retries after doing
|
|
discards, we were failing to count already allocated replicas.
|
|
|
|
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
|
|
---
|
|
fs/bcachefs/journal_io.c | 9 +++++++++
|
|
1 file changed, 9 insertions(+)
|
|
|
|
diff --git a/fs/bcachefs/journal_io.c b/fs/bcachefs/journal_io.c
|
|
index e5fce5e497f2..d7dfea5f0181 100644
|
|
--- a/fs/bcachefs/journal_io.c
|
|
+++ b/fs/bcachefs/journal_io.c
|
|
@@ -1498,6 +1498,15 @@ static int journal_write_alloc(struct journal *j, struct journal_buf *w)
|
|
READ_ONCE(c->opts.metadata_replicas_required));
|
|
|
|
rcu_read_lock();
|
|
+
|
|
+ /* We might run more than once if we have to stop and do discards: */
|
|
+ struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(bkey_i_to_s_c(&w->key));
|
|
+ bkey_for_each_ptr(ptrs, p) {
|
|
+ struct bch_dev *ca = bch2_dev_rcu_noerror(c, p->dev);
|
|
+ if (ca)
|
|
+ replicas += ca->mi.durability;
|
|
+ }
|
|
+
|
|
retry:
|
|
devs = target_rw_devs(c, BCH_DATA_journal, target);
|
|
|
|
--
|
|
2.45.2
|
|
|