summaryrefslogtreecommitdiff
path: root/libbcachefs/buckets.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/buckets.c')
-rw-r--r--libbcachefs/buckets.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libbcachefs/buckets.c b/libbcachefs/buckets.c
index 15a07e3..c68683e 100644
--- a/libbcachefs/buckets.c
+++ b/libbcachefs/buckets.c
@@ -338,12 +338,17 @@ void bch2_fs_usage_apply(struct bch_fs *c,
{
struct fs_usage_sum sum = __fs_usage_sum(*stats);
s64 added = sum.data + sum.reserved;
+ s64 should_not_have_added;
/*
* Not allowed to reduce sectors_available except by getting a
* reservation:
*/
- BUG_ON(added > (s64) (disk_res ? disk_res->sectors : 0));
+ should_not_have_added = added - (s64) (disk_res ? disk_res->sectors : 0);
+ if (WARN_ON(should_not_have_added > 0)) {
+ atomic64_sub(should_not_have_added, &c->sectors_available);
+ added -= should_not_have_added;
+ }
if (added > 0) {
disk_res->sectors -= added;
@@ -661,7 +666,7 @@ static void bch2_mark_extent(struct bch_fs *c, struct bkey_s_c k,
stats->replicas
[!p.ptr.cached && replicas ? replicas - 1 : 0].data
[!p.ptr.cached ? data_type : BCH_DATA_CACHED] +=
- sectors;
+ disk_sectors;
bch2_mark_pointer(c, e, p, disk_sectors, data_type,
stats, journal_seq, flags);