mirror of
https://github.com/torvalds/linux.git
synced 2024-12-18 09:02:17 +00:00
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: Kent Overstreet <kmo@daterainc.com> Cc: linux-stable <stable@vger.kernel.org> # >= v3.10
This commit is contained in:
parent
faa5673617
commit
29ebf465b9
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user