]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
bcachefs: Reallocate table when we're increasing size
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 17 Aug 2024 23:51:13 +0000 (19:51 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 19 Aug 2024 00:41:50 +0000 (20:41 -0400)
Fixes: c2f6e16a6771 ("bcachefs: Increase size of cuckoo hash table on too many rehashes")
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/buckets_waiting_for_journal.c

index f70eb2127d322c4bd1adf14c15f902a1ffd7fab5..f9fb150eda706cb670a38ef9e167a896ad31e203 100644 (file)
@@ -107,7 +107,7 @@ int bch2_set_bucket_needs_journal_commit(struct buckets_waiting_for_journal *b,
                nr_elements += t->d[i].journal_seq > flushed_seq;
 
        new_bits = ilog2(roundup_pow_of_two(nr_elements * 3));
-
+realloc:
        n = kvmalloc(sizeof(*n) + (sizeof(n->d[0]) << new_bits), GFP_KERNEL);
        if (!n) {
                ret = -BCH_ERR_ENOMEM_buckets_waiting_for_journal_set;
@@ -118,6 +118,8 @@ retry_rehash:
        if (nr_rehashes_this_size == 3) {
                new_bits++;
                nr_rehashes_this_size = 0;
+               kvfree(n);
+               goto realloc;
        }
 
        nr_rehashes++;