The jbd2 revoke table relies on bitwise AND operations for fast hash indexing, which requires the hash table size to be a strict power of two. Currently, this requirement is only enforced at runtime via a J_ASSERT in jbd2_journal_init_revoke(). While this successfully catches invalid dynamic allocations, it means a developer accidentally modifying the hardcoded JOURNAL_REVOKE_DEFAULT_HASH macro will experience a system panic upon mounting the filesystem during testing. Add a BUILD_BUG_ON() in journal_init_common() to validate the default macro at compile time. This acts as an immediate, zero-overhead safeguard, preventing compilation entirely if the default hash size is mathematically invalid. Signed-off-by: Milos Nikic --- fs/jbd2/journal.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index 4f397fcdb13c..62b36a2fc4e2 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -1565,6 +1565,7 @@ static journal_t *journal_init_common(struct block_device *bdev, /* The journal is marked for error until we succeed with recovery! */ journal->j_flags = JBD2_ABORT; + BUILD_BUG_ON(!is_power_of_2(JOURNAL_REVOKE_DEFAULT_HASH)); /* Set up a default-sized revoke table for the new mount. */ err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH); if (err) -- 2.53.0