Commit 36f035e9 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Fix allocator + journal interaction

The allocator needs to wait until the last update touching a bucket has
been commited before writing to it again. However, the code was checking
against the last dirty journal sequence number, not the last flushed
journal sequence number.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent a7860877
...@@ -594,7 +594,7 @@ static void find_reclaimable_buckets_lru(struct bch_fs *c, struct bch_dev *ca) ...@@ -594,7 +594,7 @@ static void find_reclaimable_buckets_lru(struct bch_fs *c, struct bch_dev *ca)
buckets = bucket_array(ca); buckets = bucket_array(ca);
ca->alloc_heap.used = 0; ca->alloc_heap.used = 0;
now = atomic64_read(&c->io_clock[READ].now); now = atomic64_read(&c->io_clock[READ].now);
last_seq_ondisk = c->journal.last_seq_ondisk; last_seq_ondisk = c->journal.flushed_seq_ondisk;
/* /*
* Find buckets with lowest read priority, by building a maxheap sorted * Find buckets with lowest read priority, by building a maxheap sorted
......
...@@ -50,7 +50,7 @@ static inline void fs_usage_data_type_to_base(struct bch_fs_usage *fs_usage, ...@@ -50,7 +50,7 @@ static inline void fs_usage_data_type_to_base(struct bch_fs_usage *fs_usage,
void bch2_bucket_seq_cleanup(struct bch_fs *c) void bch2_bucket_seq_cleanup(struct bch_fs *c)
{ {
u64 journal_seq = atomic64_read(&c->journal.seq); u64 journal_seq = atomic64_read(&c->journal.seq);
u16 last_seq_ondisk = c->journal.last_seq_ondisk; u16 last_seq_ondisk = c->journal.flushed_seq_ondisk;
struct bch_dev *ca; struct bch_dev *ca;
struct bucket_array *buckets; struct bucket_array *buckets;
struct bucket *g; struct bucket *g;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment