static noinline void
deallocate_extra_replicas(struct bch_fs *c,
- struct open_buckets *ptrs,
- struct open_buckets *ptrs_no_use,
- unsigned extra_replicas)
+ struct alloc_request *req)
{
struct open_buckets ptrs2 = { 0 };
struct open_bucket *ob;
+ unsigned extra_replicas = req->nr_effective - req->nr_replicas;
unsigned i;
- open_bucket_for_each(c, ptrs, ob, i) {
+ open_bucket_for_each(c, &req->ptrs, ob, i) {
unsigned d = ob_dev(c, ob)->mi.durability;
if (d && d <= extra_replicas) {
extra_replicas -= d;
- ob_push(c, ptrs_no_use, ob);
+ ob_push(c, &req->wp->ptrs, ob);
} else {
ob_push(c, &ptrs2, ob);
}
}
- *ptrs = ptrs2;
+ req->ptrs = ptrs2;
}
/*
goto err;
if (req.nr_effective > req.nr_replicas)
- deallocate_extra_replicas(c, &req.ptrs, &req.wp->ptrs,
- req.nr_effective - req.nr_replicas);
+ deallocate_extra_replicas(c, &req);
/* Free buckets we didn't use: */
open_bucket_for_each(c, &req.wp->ptrs, ob, i)