@@ -603,18 +603,18 @@ static int __dev_stripe_cmp(struct dev_stripe_state *stripe,
603
603
604
604
#define dev_stripe_cmp (l , r ) __dev_stripe_cmp(stripe, l, r)
605
605
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 )
609
610
{
610
- struct dev_alloc_list ret = { .nr = 0 };
611
- unsigned i ;
611
+ ret -> nr = 0 ;
612
612
613
+ unsigned i ;
613
614
for_each_set_bit (i , devs -> d , BCH_SB_MEMBERS_MAX )
614
- ret . data [ret . nr ++ ] = i ;
615
+ ret -> data [ret -> nr ++ ] = i ;
615
616
616
- bubble_sort (ret .data , ret .nr , dev_stripe_cmp );
617
- return ret ;
617
+ bubble_sort (ret -> data , ret -> nr , dev_stripe_cmp );
618
618
}
619
619
620
620
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,
705
705
return 0 ;
706
706
}
707
707
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 )
712
712
{
713
713
struct bch_fs * c = trans -> c ;
714
714
int ret = - BCH_ERR_insufficient_devices ;
715
715
716
716
BUG_ON (req -> nr_effective >= req -> nr_replicas );
717
717
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 ) {
720
721
req -> ca = bch2_dev_tryget_noerror (c , * i );
721
722
if (!req -> ca )
722
723
continue ;
@@ -776,9 +777,9 @@ static int bucket_alloc_from_stripe(struct btree_trans *trans,
776
777
if (!h )
777
778
return 0 ;
778
779
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 )
782
783
for (unsigned ec_idx = 0 ; ec_idx < h -> s -> nr_data ; ec_idx ++ ) {
783
784
if (!h -> s -> blocks [ec_idx ])
784
785
continue ;
0 commit comments