Commit 27201cfd authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcache: Fix a journalling reclaim after recovery bug



On recovery we weren't correctly keeping track of what journal buckets had open
journal entries, thus it was possible for them to be overwritten until we'd
written all new journal entries.

Signed-off-by: default avatarKent Overstreet <kmo@daterainc.com>
parent 65ddf45a
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -237,8 +237,14 @@ int bch_journal_read(struct cache_set *c, struct list_head *list)
		for (i = 0; i < ca->sb.njournal_buckets; i++)
			if (ja->seq[i] > seq) {
				seq = ja->seq[i];
				ja->cur_idx = ja->discard_idx =
					ja->last_idx = i;
				/*
				 * When journal_reclaim() goes to allocate for
				 * the first time, it'll use the bucket after
				 * ja->cur_idx
				 */
				ja->cur_idx = i;
				ja->last_idx = ja->discard_idx = (i + 1) %
					ca->sb.njournal_buckets;

			}
	}