aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <[email protected]>2024-02-12 02:17:02 -0500
committerKent Overstreet <[email protected]>2024-07-14 19:00:14 -0400
commit6675c37662341cf1a2e3b502a4dafbf7571978b2 (patch)
tree8f9f1a64524acb950dca3d99bf82292644c6b5d4
parent72c277878031a988ca472aa41370488c726d33b0 (diff)
bcachefs: bch_acct_snapshot
Signed-off-by: Kent Overstreet <[email protected]>
-rw-r--r--fs/bcachefs/buckets.c10
-rw-r--r--fs/bcachefs/disk_accounting.c3
-rw-r--r--fs/bcachefs/disk_accounting_format.h8
3 files changed, 20 insertions, 1 deletions
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c
index 06e968d98018..caa79e84f2cc 100644
--- a/fs/bcachefs/buckets.c
+++ b/fs/bcachefs/buckets.c
@@ -778,6 +778,16 @@ static int __trigger_extent(struct btree_trans *trans,
return ret;
}
+ if (acc_replicas_key.replicas.nr_devs && !level && k.k->p.snapshot) {
+ struct disk_accounting_pos acc_snapshot_key = {
+ .type = BCH_DISK_ACCOUNTING_snapshot,
+ .snapshot.id = k.k->p.snapshot,
+ };
+ ret = bch2_disk_accounting_mod(trans, &acc_snapshot_key, &replicas_sectors, 1, gc);
+ if (ret)
+ return ret;
+ }
+
if (acct_compression_key.compression.type) {
if (flags & BTREE_TRIGGER_overwrite)
bch2_u64s_neg(compression_acct, ARRAY_SIZE(compression_acct));
diff --git a/fs/bcachefs/disk_accounting.c b/fs/bcachefs/disk_accounting.c
index 8c6e76e50a9b..f980cd5af41d 100644
--- a/fs/bcachefs/disk_accounting.c
+++ b/fs/bcachefs/disk_accounting.c
@@ -146,6 +146,9 @@ void bch2_accounting_key_to_text(struct printbuf *out, struct disk_accounting_po
case BCH_DISK_ACCOUNTING_compression:
bch2_prt_compression_type(out, k->compression.type);
break;
+ case BCH_DISK_ACCOUNTING_snapshot:
+ prt_printf(out, "id=%u", k->snapshot.id);
+ break;
}
}
diff --git a/fs/bcachefs/disk_accounting_format.h b/fs/bcachefs/disk_accounting_format.h
index 2ded8ae65001..355b8545df88 100644
--- a/fs/bcachefs/disk_accounting_format.h
+++ b/fs/bcachefs/disk_accounting_format.h
@@ -100,7 +100,8 @@ static inline bool data_type_is_hidden(enum bch_data_type type)
x(persistent_reserved, 1) \
x(replicas, 2) \
x(dev_data_type, 3) \
- x(compression, 4)
+ x(compression, 4) \
+ x(snapshot, 5)
enum disk_accounting_type {
#define x(f, nr) BCH_DISK_ACCOUNTING_##f = nr,
@@ -129,6 +130,10 @@ struct bch_acct_compression {
__u8 type;
};
+struct bch_acct_snapshot {
+ __u32 id;
+};
+
struct disk_accounting_pos {
union {
struct {
@@ -140,6 +145,7 @@ struct disk_accounting_pos {
struct bch_dev_data_type dev_data_type;
struct bch_dev_stripe_buckets dev_stripe_buckets;
struct bch_acct_compression compression;
+ struct bch_acct_snapshot snapshot;
};
};
struct bpos _pad;