diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 2c0d35c882ed88a576dd48b1a07759678664100a..d8190804aee9b0dbfc8d0b4ea569e7f3b883ab16 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -1777,6 +1777,8 @@ static void run_cache_set(struct cache_set *c) struct cache *ca; struct closure cl; unsigned int i; + LIST_HEAD(journal); + struct journal_replay *l; closure_init_stack(&cl); @@ -1934,6 +1936,12 @@ static void run_cache_set(struct cache_set *c) set_bit(CACHE_SET_RUNNING, &c->flags); return; err: + while (!list_empty(&journal)) { + l = list_first_entry(&journal, struct journal_replay, list); + list_del(&l->list); + kfree(l); + } + closure_sync(&cl); /* XXX: test this, it's broken */ bch_cache_set_error(c, "%s", err);