static int bucket_alloc_set_writepoint(struct bch_fs *c,
struct alloc_request *req)
{
- struct open_buckets ptrs_skip = { .nr = 0 };
struct open_bucket *ob;
unsigned i;
int ret = 0;
+ req->ptrs2.nr = 0;
+
open_bucket_for_each(c, &req->wp->ptrs, ob, i) {
if (!ret && want_bucket(c, req, ob))
ret = add_new_bucket(c, req, ob);
else
- ob_push(c, &ptrs_skip, ob);
+ ob_push(c, &req->ptrs2, ob);
}
- req->wp->ptrs = ptrs_skip;
+ req->wp->ptrs = req->ptrs2;
return ret;
}
deallocate_extra_replicas(struct bch_fs *c,
struct alloc_request *req)
{
- struct open_buckets ptrs2 = { 0 };
struct open_bucket *ob;
unsigned extra_replicas = req->nr_effective - req->nr_replicas;
unsigned i;
+ req->ptrs2.nr = 0;
+
open_bucket_for_each(c, &req->ptrs, ob, i) {
unsigned d = ob_dev(c, ob)->mi.durability;
extra_replicas -= d;
ob_push(c, &req->wp->ptrs, ob);
} else {
- ob_push(c, &ptrs2, ob);
+ ob_push(c, &req->ptrs2, ob);
}
}
- req->ptrs = ptrs2;
+ req->ptrs = req->ptrs2;
}
/*
/* These fields are used primarily by open_bucket_add_buckets */
struct open_buckets ptrs;
+ struct open_buckets ptrs2;
unsigned nr_effective; /* sum of @ptrs durability */
bool have_cache; /* have we allocated from a 0 durability dev */
struct bch_devs_mask devs_may_alloc;