Skip to content

Commit e87de7d

Browse files
author
Kent Overstreet
committed
bcachefs: Move devs_sorted to alloc_request
More stack usage work. Signed-off-by: Kent Overstreet <[email protected]>
1 parent ff6369d commit e87de7d

File tree

3 files changed

+24
-21
lines changed

3 files changed

+24
-21
lines changed

fs/bcachefs/alloc_foreground.c

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -603,18 +603,18 @@ static int __dev_stripe_cmp(struct dev_stripe_state *stripe,
603603

604604
#define dev_stripe_cmp(l, r) __dev_stripe_cmp(stripe, l, r)
605605

606-
struct dev_alloc_list bch2_dev_alloc_list(struct bch_fs *c,
607-
struct dev_stripe_state *stripe,
608-
struct bch_devs_mask *devs)
606+
void bch2_dev_alloc_list(struct bch_fs *c,
607+
struct dev_stripe_state *stripe,
608+
struct bch_devs_mask *devs,
609+
struct dev_alloc_list *ret)
609610
{
610-
struct dev_alloc_list ret = { .nr = 0 };
611-
unsigned i;
611+
ret->nr = 0;
612612

613+
unsigned i;
613614
for_each_set_bit(i, devs->d, BCH_SB_MEMBERS_MAX)
614-
ret.data[ret.nr++] = i;
615+
ret->data[ret->nr++] = i;
615616

616-
bubble_sort(ret.data, ret.nr, dev_stripe_cmp);
617-
return ret;
617+
bubble_sort(ret->data, ret->nr, dev_stripe_cmp);
618618
}
619619

620620
static const u64 stripe_clock_hand_rescale = 1ULL << 62; /* trigger rescale at */
@@ -705,18 +705,19 @@ static int add_new_bucket(struct bch_fs *c,
705705
return 0;
706706
}
707707

708-
int bch2_bucket_alloc_set_trans(struct btree_trans *trans,
709-
struct alloc_request *req,
710-
struct dev_stripe_state *stripe,
711-
struct closure *cl)
708+
inline int bch2_bucket_alloc_set_trans(struct btree_trans *trans,
709+
struct alloc_request *req,
710+
struct dev_stripe_state *stripe,
711+
struct closure *cl)
712712
{
713713
struct bch_fs *c = trans->c;
714714
int ret = -BCH_ERR_insufficient_devices;
715715

716716
BUG_ON(req->nr_effective >= req->nr_replicas);
717717

718-
struct dev_alloc_list devs_sorted = bch2_dev_alloc_list(c, stripe, &req->devs_may_alloc);
719-
darray_for_each(devs_sorted, i) {
718+
bch2_dev_alloc_list(c, stripe, &req->devs_may_alloc, &req->devs_sorted);
719+
720+
darray_for_each(req->devs_sorted, i) {
720721
req->ca = bch2_dev_tryget_noerror(c, *i);
721722
if (!req->ca)
722723
continue;
@@ -776,9 +777,9 @@ static int bucket_alloc_from_stripe(struct btree_trans *trans,
776777
if (!h)
777778
return 0;
778779

779-
struct dev_alloc_list devs_sorted =
780-
bch2_dev_alloc_list(c, &req->wp->stripe, &req->devs_may_alloc);
781-
darray_for_each(devs_sorted, i)
780+
bch2_dev_alloc_list(c, &req->wp->stripe, &req->devs_may_alloc, &req->devs_sorted);
781+
782+
darray_for_each(req->devs_sorted, i)
782783
for (unsigned ec_idx = 0; ec_idx < h->s->nr_data; ec_idx++) {
783784
if (!h->s->blocks[ec_idx])
784785
continue;

fs/bcachefs/alloc_foreground.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ struct alloc_request {
4242
struct bch_devs_mask devs_may_alloc;
4343

4444
/* bch2_bucket_alloc_set_trans(): */
45+
struct dev_alloc_list devs_sorted;
4546
struct bch_dev_usage usage;
4647

4748
/* bch2_bucket_alloc_trans(): */
@@ -71,9 +72,10 @@ struct alloc_request {
7172
struct bch_devs_mask scratch_devs_may_alloc;
7273
};
7374

74-
struct dev_alloc_list bch2_dev_alloc_list(struct bch_fs *,
75-
struct dev_stripe_state *,
76-
struct bch_devs_mask *);
75+
void bch2_dev_alloc_list(struct bch_fs *,
76+
struct dev_stripe_state *,
77+
struct bch_devs_mask *,
78+
struct dev_alloc_list *);
7779
void bch2_dev_stripe_increment(struct bch_dev *, struct dev_stripe_state *);
7880

7981
static inline struct bch_dev *ob_dev(struct bch_fs *c, struct open_bucket *ob)

fs/bcachefs/journal_io.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1613,7 +1613,7 @@ static int journal_write_alloc(struct journal *j, struct journal_buf *w,
16131613

16141614
retry_target:
16151615
devs = target_rw_devs(c, BCH_DATA_journal, target);
1616-
devs_sorted = bch2_dev_alloc_list(c, &j->wp.stripe, &devs);
1616+
bch2_dev_alloc_list(c, &j->wp.stripe, &devs, &devs_sorted);
16171617
retry_alloc:
16181618
__journal_write_alloc(j, w, &devs_sorted, sectors, replicas, replicas_want);
16191619

0 commit comments

Comments
 (0)