From: Kent Overstreet Date: Sat, 22 Mar 2025 01:06:43 +0000 (-0400) Subject: bcachefs: alloc_request.data_type X-Git-Tag: block-6.16-20250606~39^2~208 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=799c41830332121b067c26b43887a95a4f848c22;p=linux-block.git bcachefs: alloc_request.data_type Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/alloc_foreground.c b/fs/bcachefs/alloc_foreground.c index 93c91b5706fb..5cca41b28236 100644 --- a/fs/bcachefs/alloc_foreground.c +++ b/fs/bcachefs/alloc_foreground.c @@ -716,7 +716,6 @@ static int add_new_bucket(struct bch_fs *c, int bch2_bucket_alloc_set_trans(struct btree_trans *trans, struct alloc_request *req, struct dev_stripe_state *stripe, - enum bch_data_type data_type, struct closure *cl) { struct bch_fs *c = trans->c; @@ -737,7 +736,7 @@ int bch2_bucket_alloc_set_trans(struct btree_trans *trans, struct bch_dev_usage usage; struct open_bucket *ob = bch2_bucket_alloc_trans(trans, ca, - req->watermark, data_type, + req->watermark, req->data_type, cl, req->flags & BCH_WRITE_alloc_nowait, &usage); if (!IS_ERR(ob)) @@ -933,8 +932,7 @@ retry_blocking: * Try nonblocking first, so that if one device is full we'll try from * other devices: */ - ret = bch2_bucket_alloc_set_trans(trans, req, &req->wp->stripe, - req->wp->data_type, cl); + ret = bch2_bucket_alloc_set_trans(trans, req, &req->wp->stripe, cl); if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart) && !bch2_err_matches(ret, BCH_ERR_insufficient_devices) && @@ -1285,12 +1283,14 @@ retry: *wp_ret = req.wp = writepoint_find(trans, write_point.v); + req.data_type = req.wp->data_type; + ret = bch2_trans_relock(trans); if (ret) goto err; /* metadata may not allocate on cache devices: */ - if (req.wp->data_type != BCH_DATA_user) + if (req.data_type != BCH_DATA_user) req.have_cache = true; if (target && !(flags & BCH_WRITE_only_specified_devs)) { diff --git a/fs/bcachefs/alloc_foreground.h b/fs/bcachefs/alloc_foreground.h index 874aadf34ebf..24d6e5863737 100644 --- a/fs/bcachefs/alloc_foreground.h +++ b/fs/bcachefs/alloc_foreground.h @@ -30,6 +30,7 @@ struct alloc_request { bool ec; enum bch_watermark watermark; enum bch_write_flags flags; + enum bch_data_type data_type; struct bch_devs_list *devs_have; struct write_point *wp; @@ -191,8 +192,7 @@ static inline bool bch2_bucket_is_open_safe(struct bch_fs *c, unsigned dev, u64 enum bch_write_flags; int bch2_bucket_alloc_set_trans(struct btree_trans *, struct alloc_request *, - struct dev_stripe_state *, enum bch_data_type, - struct closure *); + struct dev_stripe_state *, struct closure *); int bch2_alloc_sectors_start_trans(struct btree_trans *, unsigned, unsigned, diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c index fc09e0655014..0865fb8a6f36 100644 --- a/fs/bcachefs/ec.c +++ b/fs/bcachefs/ec.c @@ -1755,11 +1755,9 @@ static int new_stripe_alloc_buckets(struct btree_trans *trans, if (nr_have_parity < s->nr_parity) { req.nr_replicas = s->nr_parity; req.nr_effective = nr_have_parity; + req.data_type = BCH_DATA_parity; - ret = bch2_bucket_alloc_set_trans(trans, &req, - &h->parity_stripe, - BCH_DATA_parity, - cl); + ret = bch2_bucket_alloc_set_trans(trans, &req, &h->parity_stripe, cl); open_bucket_for_each(c, &req.ptrs, ob, i) { j = find_next_zero_bit(s->blocks_gotten, @@ -1780,11 +1778,9 @@ static int new_stripe_alloc_buckets(struct btree_trans *trans, if (nr_have_data < s->nr_data) { req.nr_replicas = s->nr_data; req.nr_effective = nr_have_data; + req.data_type = BCH_DATA_user; - ret = bch2_bucket_alloc_set_trans(trans, &req, - &h->block_stripe, - BCH_DATA_user, - cl); + ret = bch2_bucket_alloc_set_trans(trans, &req, &h->block_stripe, cl); open_bucket_for_each(c, &req.ptrs, ob, i) { j = find_next_zero_bit(s->blocks_gotten,