diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-01-20 20:36:26 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-06-03 16:10:44 -0400 |
commit | bf52757602f3a617421c76312cfa92454c1b088c (patch) | |
tree | b08e44a58570f28cf5f36bbf2cd65e5d93640c0b | |
parent | cb872d69cab8d63b96199774b6d9fbf418d19245 (diff) |
invalidate buckets counters WIPbcachefs-disk-accounting-rewrite
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/alloc_background.c | 9 | ||||
-rw-r--r-- | fs/bcachefs/trace.h | 6 |
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), |