summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-01-20 20:36:26 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-06-03 16:10:44 -0400
commitbf52757602f3a617421c76312cfa92454c1b088c (patch)
treeb08e44a58570f28cf5f36bbf2cd65e5d93640c0b
parentcb872d69cab8d63b96199774b6d9fbf418d19245 (diff)
invalidate buckets counters WIPbcachefs-disk-accounting-rewrite
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/alloc_background.c9
-rw-r--r--fs/bcachefs/trace.h6
2 files changed, 14 insertions, 1 deletions
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index c220e9c9444f..079fb9b4aa0a 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -1960,6 +1960,12 @@ static void bch2_discard_one_bucket_fast(struct bch_fs *c, struct bpos bucket)
bch2_write_ref_put(c, BCH_WRITE_REF_discard_fast);
}
+struct invalidate_buckets_state {
+ s64 nr_to_invalidate;
+ u64 skipped_open;
+ u64 skipped_lru;
+};
+
static int invalidate_one_bucket(struct btree_trans *trans,
struct btree_iter *lru_iter,
struct bkey_s_c lru_k,
@@ -1989,7 +1995,8 @@ static int invalidate_one_bucket(struct btree_trans *trans,
goto out;
/* We expect harmless races here due to the btree write buffer: */
- if (lru_pos_time(lru_iter->pos) != alloc_lru_idx_read(a->v))
+ if (!alloc_lru_idx_read(a->v) ||
+ alloc_lru_idx_read(a->v) > lru_pos_time(lru_iter->pos))
goto out;
BUG_ON(a->v.data_type != BCH_DATA_cached);
diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h
index 169a47fc9fe1..8cee27c9a1f5 100644
--- a/fs/bcachefs/trace.h
+++ b/fs/bcachefs/trace.h
@@ -730,6 +730,12 @@ TRACE_EVENT(discard_buckets,
__entry->err)
);
+DEFINE_EVENT(fs_str, invalidate_buckets,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
+);
+
+
TRACE_EVENT(bucket_invalidate,
TP_PROTO(struct bch_fs *c, unsigned dev, u64 bucket, u32 sectors),
TP_ARGS(c, dev, bucket, sectors),