summaryrefslogtreecommitdiff
path: root/fs/bcachefs/buckets.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-03-02 09:54:17 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:09:55 +0300
commite84face6f0c9512d896eb1bf6c8238ea2fa7edd0 (patch)
tree802f0dde21c3311cf7a0245f379e0f1d2450bc29 /fs/bcachefs/buckets.h
parentd57c9add59b187a6fcd76cb80d60f36234ca8033 (diff)
downloadlinux-e84face6f0c9512d896eb1bf6c8238ea2fa7edd0.tar.xz
bcachefs: RESERVE_stripe
Rework stripe creation path - new algorithm for deciding when to create new stripes or reuse existing stripes. We add a new allocation watermark, RESERVE_stripe, above RESERVE_none. Then we always try to create a new stripe by doing RESERVE_stripe allocations; if this fails, we reuse an existing stripe and allocate buckets for it with the reserve watermark for the given write (RESERVE_none or RESERVE_movinggc). Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/buckets.h')
-rw-r--r--fs/bcachefs/buckets.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/bcachefs/buckets.h b/fs/bcachefs/buckets.h
index 22721bfea414..d677b0225c52 100644
--- a/fs/bcachefs/buckets.h
+++ b/fs/bcachefs/buckets.h
@@ -157,6 +157,9 @@ static inline u64 bch2_dev_buckets_reserved(struct bch_dev *ca, enum alloc_reser
switch (reserve) {
case RESERVE_NR:
unreachable();
+ case RESERVE_stripe:
+ reserved += ca->mi.nbuckets >> 6;
+ fallthrough;
case RESERVE_none:
reserved += ca->mi.nbuckets >> 6;
fallthrough;