gentoo-overlay/sys-kernel/hardened-kernel/files/linux-6.12/0167-bcachefs-Fix-failure-t...

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