summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Swenson <nks@daterainc.com>2014-01-24 00:21:02 +0100
committerKent Overstreet <kmo@daterainc.com>2014-03-18 20:22:34 +0100
commit3f6ef38110b6955327fea3105f004a3b61a3f65f (patch)
treed9521b718770408838688935a79f57d6b1267255
parentbcache: Fix moving_pred() (diff)
downloadlinux-3f6ef38110b6955327fea3105f004a3b61a3f65f.tar.xz
linux-3f6ef38110b6955327fea3105f004a3b61a3f65f.zip
bcache: stop moving_gc marking buckets that can't be moved.
Signed-off-by: Nicholas Swenson <nks@daterainc.com>
-rw-r--r--drivers/md/bcache/movinggc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/bcache/movinggc.c b/drivers/md/bcache/movinggc.c
index 5e8e58701d37..cd7490311e51 100644
--- a/drivers/md/bcache/movinggc.c
+++ b/drivers/md/bcache/movinggc.c
@@ -215,7 +215,10 @@ void bch_moving_gc(struct cache_set *c)
ca->heap.used = 0;
for_each_bucket(b, ca) {
- if (!GC_SECTORS_USED(b))
+ if (GC_MARK(b) == GC_MARK_METADATA ||
+ !GC_SECTORS_USED(b) ||
+ GC_SECTORS_USED(b) == ca->sb.bucket_size ||
+ atomic_read(&b->pin))
continue;
if (!heap_full(&ca->heap)) {