From 1dd7f9d98de0740b42f1ac3f0b1d8af9c76801de Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Thu, 4 Apr 2019 21:53:12 -0400 Subject: bcachefs: Rewrite journal_seq_blacklist machinery Now, we store blacklisted journal sequence numbers in the superblock, not the journal: this helps to greatly simplify the code, and more importantly it's now implemented in a way that doesn't require all btree nodes to be visited before starting the journal - instead, we unconditionally blacklist the next 4 journal sequence numbers after an unclean shutdown. Signed-off-by: Kent Overstreet --- fs/bcachefs/bcachefs.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'fs/bcachefs/bcachefs.h') diff --git a/fs/bcachefs/bcachefs.h b/fs/bcachefs/bcachefs.h index d8c487e33592..8acdc7ffeca3 100644 --- a/fs/bcachefs/bcachefs.h +++ b/fs/bcachefs/bcachefs.h @@ -185,6 +185,7 @@ #include #include #include +#include #include #include #include @@ -486,6 +487,7 @@ enum { BCH_FS_RW, /* shutdown: */ + BCH_FS_STOPPING, BCH_FS_EMERGENCY_RO, BCH_FS_WRITE_DISABLE_COMPLETE, @@ -511,6 +513,15 @@ struct bch_fs_pcpu { u64 sectors_available; }; +struct journal_seq_blacklist_table { + size_t nr; + struct journal_seq_blacklist_table_entry { + u64 start; + u64 end; + bool dirty; + } entries[0]; +}; + struct bch_fs { struct closure cl; @@ -646,6 +657,11 @@ struct bch_fs { struct io_clock io_clock[2]; + /* JOURNAL SEQ BLACKLIST */ + struct journal_seq_blacklist_table * + journal_seq_blacklist_table; + struct work_struct journal_seq_blacklist_gc_work; + /* ALLOCATOR */ spinlock_t freelist_lock; struct closure_waitlist freelist_wait; -- cgit