summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/bcachefs/alloc_background.c14
-rw-r--r--fs/bcachefs/recovery.c1
2 files changed, 12 insertions, 3 deletions
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index 474ef290f39f..0939200e6d1a 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -1255,7 +1255,15 @@ static int bch2_check_alloc_hole_bucket_gens(struct btree_trans *trans,
}
if (need_update) {
- ret = bch2_trans_update(trans, bucket_gens_iter, &g.k_i, 0);
+ struct bkey_i *k = bch2_trans_kmalloc(trans, sizeof(g));
+
+ ret = PTR_ERR_OR_ZERO(k);
+ if (ret)
+ goto err;
+
+ memcpy(k, &g, sizeof(g));
+
+ ret = bch2_trans_update(trans, bucket_gens_iter, k, 0);
if (ret)
goto err;
}
@@ -1381,7 +1389,7 @@ static int bch2_check_bucket_gens_key(struct btree_trans *trans,
k = bch2_trans_kmalloc(trans, sizeof(g));
ret = PTR_ERR_OR_ZERO(k);
if (ret)
- return ret;
+ goto out;
memcpy(k, &g, sizeof(g));
ret = bch2_trans_update(trans, iter, k, 0);
@@ -1433,7 +1441,7 @@ int bch2_check_alloc_info(struct bch_fs *c)
&freespace_iter,
&bucket_gens_iter);
if (ret)
- break;
+ goto bkey_err;
} else {
next = k.k->p;
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c
index b190ab3e8682..069aafba48ac 100644
--- a/fs/bcachefs/recovery.c
+++ b/fs/bcachefs/recovery.c
@@ -922,6 +922,7 @@ static bool btree_id_is_alloc(enum btree_id id)
case BTREE_ID_backpointers:
case BTREE_ID_need_discard:
case BTREE_ID_freespace:
+ case BTREE_ID_bucket_gens:
return true;
default:
return false;