summaryrefslogtreecommitdiff
path: root/libbcachefs/journal.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-04-15 13:05:38 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-04-19 21:26:48 -0400
commitceac31bcb6992cb8b7770d2a0e91b055e5020431 (patch)
tree77a66249069a2de7bafdcec5afbce387059d0bf9 /libbcachefs/journal.c
parent8ba5e814fd3d0e9559adca72f73202a7dc304acc (diff)
Update bcachefs sources to fe72e70682 bcachefs: Fix for btree_gc repairing interior btree ptrs
Diffstat (limited to 'libbcachefs/journal.c')
-rw-r--r--libbcachefs/journal.c37
1 files changed, 16 insertions, 21 deletions
diff --git a/libbcachefs/journal.c b/libbcachefs/journal.c
index b901be5..1b49a1c 100644
--- a/libbcachefs/journal.c
+++ b/libbcachefs/journal.c
@@ -787,7 +787,7 @@ static int __bch2_set_nr_journal_buckets(struct bch_dev *ca, unsigned nr,
* We may be called from the device add path, before the new device has
* actually been added to the running filesystem:
*/
- if (c)
+ if (!new_fs)
spin_lock(&c->journal.lock);
memcpy(new_buckets, ja->buckets, ja->nr * sizeof(u64));
@@ -795,17 +795,17 @@ static int __bch2_set_nr_journal_buckets(struct bch_dev *ca, unsigned nr,
swap(new_buckets, ja->buckets);
swap(new_bucket_seq, ja->bucket_seq);
- if (c)
+ if (!new_fs)
spin_unlock(&c->journal.lock);
while (ja->nr < nr) {
struct open_bucket *ob = NULL;
unsigned pos;
- long bucket;
+ long b;
if (new_fs) {
- bucket = bch2_bucket_alloc_new_fs(ca);
- if (bucket < 0) {
+ b = bch2_bucket_alloc_new_fs(ca);
+ if (b < 0) {
ret = -ENOSPC;
goto err;
}
@@ -819,10 +819,8 @@ static int __bch2_set_nr_journal_buckets(struct bch_dev *ca, unsigned nr,
goto err;
}
- bucket = sector_to_bucket(ca, ob->ptr.offset);
- }
+ b = sector_to_bucket(ca, ob->ptr.offset);
- if (c) {
percpu_down_read(&c->mark_lock);
spin_lock(&c->journal.lock);
}
@@ -839,9 +837,9 @@ static int __bch2_set_nr_journal_buckets(struct bch_dev *ca, unsigned nr,
__array_insert_item(journal_buckets->buckets, ja->nr, pos);
ja->nr++;
- ja->buckets[pos] = bucket;
+ ja->buckets[pos] = b;
ja->bucket_seq[pos] = 0;
- journal_buckets->buckets[pos] = cpu_to_le64(bucket);
+ journal_buckets->buckets[pos] = cpu_to_le64(b);
if (pos <= ja->discard_idx)
ja->discard_idx = (ja->discard_idx + 1) % ja->nr;
@@ -852,28 +850,25 @@ static int __bch2_set_nr_journal_buckets(struct bch_dev *ca, unsigned nr,
if (pos <= ja->cur_idx)
ja->cur_idx = (ja->cur_idx + 1) % ja->nr;
- if (!c || new_fs)
- bch2_mark_metadata_bucket(c, ca, bucket, BCH_DATA_journal,
+ if (new_fs) {
+ bch2_mark_metadata_bucket(c, ca, b, BCH_DATA_journal,
ca->mi.bucket_size,
gc_phase(GC_PHASE_SB),
0);
-
- if (c) {
+ } else {
spin_unlock(&c->journal.lock);
percpu_up_read(&c->mark_lock);
- }
- if (c && !new_fs)
ret = bch2_trans_do(c, NULL, NULL, BTREE_INSERT_NOFAIL,
- bch2_trans_mark_metadata_bucket(&trans, NULL, ca,
- bucket, BCH_DATA_journal,
+ bch2_trans_mark_metadata_bucket(&trans, ca,
+ b, BCH_DATA_journal,
ca->mi.bucket_size));
- if (!new_fs)
bch2_open_bucket_put(c, ob);
- if (ret)
- goto err;
+ if (ret)
+ goto err;
+ }
}
err:
bch2_sb_resize_journal(&ca->disk_sb,