summaryrefslogtreecommitdiff
path: root/libbcachefs/btree_gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/btree_gc.c')
-rw-r--r--libbcachefs/btree_gc.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/libbcachefs/btree_gc.c b/libbcachefs/btree_gc.c
index 8771ef1f..4f581130 100644
--- a/libbcachefs/btree_gc.c
+++ b/libbcachefs/btree_gc.c
@@ -109,7 +109,7 @@ static int bch2_gc_mark_key(struct bch_fs *c, struct bkey_s_c k,
atomic64_set(&c->key_version, k.k->version.lo);
if (test_bit(BCH_FS_REBUILD_REPLICAS, &c->flags) ||
- fsck_err_on(!bch2_bkey_replicas_marked(c, k, false), c,
+ fsck_err_on(!bch2_bkey_replicas_marked(c, k), c,
"superblock not marked as containing replicas (type %u)",
k.k->type)) {
ret = bch2_mark_bkey_replicas(c, k);
@@ -433,16 +433,16 @@ void bch2_mark_dev_superblock(struct bch_fs *c, struct bch_dev *ca,
if (offset == BCH_SB_SECTOR)
mark_metadata_sectors(c, ca, 0, BCH_SB_SECTOR,
- BCH_DATA_SB, flags);
+ BCH_DATA_sb, flags);
mark_metadata_sectors(c, ca, offset,
offset + (1 << layout->sb_max_size_bits),
- BCH_DATA_SB, flags);
+ BCH_DATA_sb, flags);
}
for (i = 0; i < ca->journal.nr; i++) {
b = ca->journal.buckets[i];
- bch2_mark_metadata_bucket(c, ca, b, BCH_DATA_JOURNAL,
+ bch2_mark_metadata_bucket(c, ca, b, BCH_DATA_journal,
ca->mi.bucket_size,
gc_phase(GC_PHASE_SB), flags);
}
@@ -617,8 +617,11 @@ static int bch2_gc_done(struct bch_fs *c,
copy_stripe_field(block_sectors[i],
"block_sectors[%u]", i);
- if (dst->alive)
+ if (dst->alive) {
+ spin_lock(&c->ec_stripes_heap_lock);
bch2_stripes_heap_insert(c, dst, dst_iter.pos);
+ spin_unlock(&c->ec_stripes_heap_lock);
+ }
genradix_iter_advance(&dst_iter, &c->stripes[0]);
genradix_iter_advance(&src_iter, &c->stripes[1]);
@@ -673,8 +676,8 @@ static int bch2_gc_done(struct bch_fs *c,
char buf[80];
if (metadata_only &&
- (e->data_type == BCH_DATA_USER ||
- e->data_type == BCH_DATA_CACHED))
+ (e->data_type == BCH_DATA_user ||
+ e->data_type == BCH_DATA_cached))
continue;
bch2_replicas_entry_to_text(&PBUF(buf), e);
@@ -759,8 +762,8 @@ static int bch2_gc_start(struct bch_fs *c,
d->gen_valid = s->gen_valid;
if (metadata_only &&
- (s->mark.data_type == BCH_DATA_USER ||
- s->mark.data_type == BCH_DATA_CACHED)) {
+ (s->mark.data_type == BCH_DATA_user ||
+ s->mark.data_type == BCH_DATA_cached)) {
d->_mark = s->mark;
d->_mark.owned_by_allocator = 0;
}
@@ -949,8 +952,10 @@ int bch2_gc_gens(struct bch_fs *c)
for (i = 0; i < BTREE_ID_NR; i++)
if (btree_node_type_needs_gc(i)) {
ret = bch2_gc_btree_gens(c, i);
- if (ret)
+ if (ret) {
+ bch_err(c, "error recalculating oldest_gen: %i", ret);
goto err;
+ }
}
for_each_member_device(ca, c, i) {
@@ -961,6 +966,8 @@ int bch2_gc_gens(struct bch_fs *c)
g->oldest_gen = g->gc_gen;
up_read(&ca->bucket_lock);
}
+
+ c->gc_count++;
err:
up_read(&c->gc_lock);
return ret;