Signed-off-by: Kent Overstreet <[email protected]>
---
fs/bcachefs/alloc_foreground.c | 10 +++++-----
fs/bcachefs/alloc_foreground.h | 4 ++--
fs/bcachefs/ec.c | 12 ++++--------
3 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/fs/bcachefs/alloc_foreground.c b/fs/bcachefs/alloc_foreground.c
index ecbf25888806..7de52cabbef3 100644
--- a/fs/bcachefs/alloc_foreground.c
+++ b/fs/bcachefs/alloc_foreground.c
@@ -689,7 +689,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;
@@ -710,7 +709,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))
@@ -906,8 +905,7 @@ static int __open_bucket_add_buckets(struct btree_trans
*trans,
* 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) &&
@@ -1258,12 +1256,14 @@ int bch2_alloc_sectors_start_trans(struct btree_trans
*trans,
*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 741d81611f92..15135b6b63ce 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;
@@ -189,8 +190,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 c2a8781fc154..e8e63902a438 100644
--- a/fs/bcachefs/ec.c
+++ b/fs/bcachefs/ec.c
@@ -1757,11 +1757,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,
@@ -1782,11 +1780,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,
--
2.49.0