diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-02-10 21:01:40 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-02-13 20:33:38 -0500 |
commit | 4e07447503f01766ae976207eb3b947437ed8dbc (patch) | |
tree | 243df9d99400741610eaaf1238810a09384bd6e4 /fs/bcachefs/journal_io.c | |
parent | 04eb57930e4e471d8f16455a748df2009d43c139 (diff) | |
download | linux-stable-4e07447503f01766ae976207eb3b947437ed8dbc.tar.gz linux-stable-4e07447503f01766ae976207eb3b947437ed8dbc.tar.bz2 linux-stable-4e07447503f01766ae976207eb3b947437ed8dbc.zip |
bcachefs: Clamp replicas_required to replicas
This prevents going emergency read only when the user has specified
replicas_required > replicas.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/journal_io.c')
-rw-r--r-- | fs/bcachefs/journal_io.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/bcachefs/journal_io.c b/fs/bcachefs/journal_io.c index bfd6585e746d..47805193f18c 100644 --- a/fs/bcachefs/journal_io.c +++ b/fs/bcachefs/journal_io.c @@ -1478,6 +1478,8 @@ static int journal_write_alloc(struct journal *j, struct journal_buf *w) c->opts.foreground_target; unsigned i, replicas = 0, replicas_want = READ_ONCE(c->opts.metadata_replicas); + unsigned replicas_need = min_t(unsigned, replicas_want, + READ_ONCE(c->opts.metadata_replicas_required)); rcu_read_lock(); retry: @@ -1526,7 +1528,7 @@ done: BUG_ON(bkey_val_u64s(&w->key.k) > BCH_REPLICAS_MAX); - return replicas >= c->opts.metadata_replicas_required ? 0 : -EROFS; + return replicas >= replicas_need ? 0 : -EROFS; } static void journal_buf_realloc(struct journal *j, struct journal_buf *buf) |