diff --git a/fs/bcachefs/alloc_foreground.c b/fs/bcachefs/alloc_foreground.c index 5aab85f1a835..7b048ef99b97 100644 --- a/fs/bcachefs/alloc_foreground.c +++ b/fs/bcachefs/alloc_foreground.c @@ -97,7 +97,7 @@ void __bch2_open_bucket_put(struct bch_fs *c, struct open_bucket *ob) struct bch_dev *ca = bch_dev_bkey_exists(c, ob->dev); if (ob->ec) { - bch2_ec_bucket_written(c, ob); + ec_stripe_new_put(c, ob->ec); return; } @@ -838,10 +838,10 @@ got_bucket: ob->ec_idx = ec_idx; ob->ec = h->s; + ec_stripe_new_get(h->s); add_new_bucket(c, ptrs, devs_may_alloc, nr_effective, have_cache, flags, ob); - atomic_inc(&h->s->pin); out_put_head: bch2_ec_stripe_head_put(c, h); return 0; diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c index 4a9a9a05058a..f131a70f282f 100644 --- a/fs/bcachefs/ec.c +++ b/fs/bcachefs/ec.c @@ -1193,15 +1193,6 @@ void bch2_ec_do_stripe_creates(struct bch_fs *c) bch2_write_ref_put(c, BCH_WRITE_REF_stripe_create); } -static void ec_stripe_new_put(struct bch_fs *c, struct ec_stripe_new *s) -{ - BUG_ON(atomic_read(&s->pin) <= 0); - BUG_ON(!s->err && !s->idx); - - if (atomic_dec_and_test(&s->pin)) - bch2_ec_do_stripe_creates(c); -} - static void ec_stripe_set_pending(struct bch_fs *c, struct ec_stripe_head *h) { struct ec_stripe_new *s = h->s; @@ -1218,14 +1209,6 @@ static void ec_stripe_set_pending(struct bch_fs *c, struct ec_stripe_head *h) ec_stripe_new_put(c, s); } -/* have a full bucket - hand it off to be erasure coded: */ -void bch2_ec_bucket_written(struct bch_fs *c, struct open_bucket *ob) -{ - struct ec_stripe_new *s = ob->ec; - - ec_stripe_new_put(c, s); -} - void bch2_ec_bucket_cancel(struct bch_fs *c, struct open_bucket *ob) { struct ec_stripe_new *s = ob->ec; diff --git a/fs/bcachefs/ec.h b/fs/bcachefs/ec.h index 56d1b5e7d797..d112aea9ec56 100644 --- a/fs/bcachefs/ec.h +++ b/fs/bcachefs/ec.h @@ -198,7 +198,6 @@ int bch2_ec_read_extent(struct bch_fs *, struct bch_read_bio *); void *bch2_writepoint_ec_buf(struct bch_fs *, struct write_point *); -void bch2_ec_bucket_written(struct bch_fs *, struct open_bucket *); void bch2_ec_bucket_cancel(struct bch_fs *, struct open_bucket *); int bch2_ec_stripe_new_alloc(struct bch_fs *, struct ec_stripe_head *); @@ -213,6 +212,21 @@ void bch2_stripes_heap_del(struct bch_fs *, struct stripe *, size_t); void bch2_stripes_heap_insert(struct bch_fs *, struct stripe *, size_t); void bch2_do_stripe_deletes(struct bch_fs *); +void bch2_ec_do_stripe_creates(struct bch_fs *); + +static inline void ec_stripe_new_get(struct ec_stripe_new *s) +{ + atomic_inc(&s->pin); +} + +static inline void ec_stripe_new_put(struct bch_fs *c, struct ec_stripe_new *s) +{ + BUG_ON(atomic_read(&s->pin) <= 0); + BUG_ON(!s->err && !s->idx); + + if (atomic_dec_and_test(&s->pin)) + bch2_ec_do_stripe_creates(c); +} void bch2_ec_stop_dev(struct bch_fs *, struct bch_dev *);