bcachefs: alloc_request.data_type
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 22 Mar 2025 01:06:43 +0000 (21:06 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 22 May 2025 00:13:30 +0000 (20:13 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_foreground.c
fs/bcachefs/alloc_foreground.h
fs/bcachefs/ec.c

index 93c91b5706fb99eaaa671fe3b676d231e8258972..5cca41b28236a30d1544099e4cc15bfea060c6e3 100644 (file)
@@ -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)) {
index 874aadf34ebf3bbaacc8d012bf580dbe027de523..24d6e58637374600050f4a6881a2544734eeaa0f 100644 (file)
@@ -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,
index fc09e06550147920f43bd368e22e4bb9d65be921..0865fb8a6f36ce0c6aa2edb63c96866eb67abd2f 100644 (file)
@@ -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,