From 943f9946a6cc58e2c15ae39970547cddbe845190 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 1 Oct 2022 23:54:46 -0400 Subject: [PATCH] bcachefs: Don't quash error in bch2_bucket_alloc_set_trans() We were incorrectly returning -BCH_ERR_insufficient_devices when we'd received a different error from bch2_bucket_alloc_trans(), which (erronously) turns into -EROFS further up the call chain. Signed-off-by: Kent Overstreet --- fs/bcachefs/alloc_foreground.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/fs/bcachefs/alloc_foreground.c b/fs/bcachefs/alloc_foreground.c index 2318d08ab70f6..0a7657541b8c0 100644 --- a/fs/bcachefs/alloc_foreground.c +++ b/fs/bcachefs/alloc_foreground.c @@ -671,7 +671,7 @@ static int bch2_bucket_alloc_set_trans(struct btree_trans *trans, bch2_dev_alloc_list(c, stripe, devs_may_alloc); unsigned dev; struct bch_dev *ca; - int ret = 0; + int ret = -BCH_ERR_insufficient_devices; unsigned i; BUG_ON(*nr_effective >= nr_replicas); @@ -701,8 +701,8 @@ static int bch2_bucket_alloc_set_trans(struct btree_trans *trans, bch2_dev_stripe_increment(ca, stripe); percpu_ref_put(&ca->ref); - ret = PTR_ERR_OR_ZERO(ob); - if (ret) { + if (IS_ERR(ob)) { + ret = PTR_ERR(ob); if (bch2_err_matches(ret, BCH_ERR_transaction_restart) || cl) break; continue; @@ -711,15 +711,12 @@ static int bch2_bucket_alloc_set_trans(struct btree_trans *trans, add_new_bucket(c, ptrs, devs_may_alloc, nr_effective, have_cache, flags, ob); - if (*nr_effective >= nr_replicas) + if (*nr_effective >= nr_replicas) { + ret = 0; break; + } } - if (*nr_effective >= nr_replicas) - ret = 0; - else if (!ret) - ret = -BCH_ERR_insufficient_devices; - return ret; } -- 2.30.2