From: Kent Overstreet Date: Sun, 2 Oct 2022 03:54:46 +0000 (-0400) Subject: bcachefs: Don't quash error in bch2_bucket_alloc_set_trans() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=943f9946a6cc58e2c15ae39970547cddbe845190;p=linux.git 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 --- 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; }