Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29ebf465 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcache: Fix GC_SECTORS_USED() calculation



Part of the job of garbage collection is to add up however many sectors
of live data it finds in each bucket, but that doesn't work very well if
it doesn't reset GC_SECTORS_USED() when it starts. Whoops.

This wouldn't have broken anything horribly, but allocation tries to
preferentially reclaim buckets that are mostly empty and that's not
gonna work with an incorrect GC_SECTORS_USED() value.

Signed-off-by: default avatarKent Overstreet <kmo@daterainc.com>
Cc: linux-stable <stable@vger.kernel.org> # >= v3.10
parent faa56736
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1410,8 +1410,10 @@ static void btree_gc_start(struct cache_set *c)
	for_each_cache(ca, c, i)
		for_each_bucket(b, ca) {
			b->gc_gen = b->gen;
			if (!atomic_read(&b->pin))
			if (!atomic_read(&b->pin)) {
				SET_GC_MARK(b, GC_MARK_RECLAIMABLE);
				SET_GC_SECTORS_USED(b, 0);
			}
		}

	mutex_unlock(&c->bucket_lock);