summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/backpointers.c2
-rw-r--r--libbcachefs/movinggc.c16
3 files changed, 15 insertions, 5 deletions
diff --git a/.bcachefs_revision b/.bcachefs_revision
index d9447c3f..9acffb57 100644
--- a/.bcachefs_revision
+++ b/.bcachefs_revision
@@ -1 +1 @@
-eb83f1f842bb95e1f61489b48854240777368763
+676dd269f0f8d59f730ba8e96474448576e4f677
diff --git a/libbcachefs/backpointers.c b/libbcachefs/backpointers.c
index 2f194f86..2fb96fa9 100644
--- a/libbcachefs/backpointers.c
+++ b/libbcachefs/backpointers.c
@@ -651,6 +651,8 @@ static int bch2_check_extents_to_backpointers_pass(struct btree_trans *trans,
}
if (ret)
break;
+ if (bpos_eq(iter.pos, SPOS_MAX))
+ break;
bch2_btree_iter_advance(&iter);
}
bch2_trans_iter_exit(trans, &iter);
diff --git a/libbcachefs/movinggc.c b/libbcachefs/movinggc.c
index 7155e206..fd239a26 100644
--- a/libbcachefs/movinggc.c
+++ b/libbcachefs/movinggc.c
@@ -170,15 +170,23 @@ static int bch2_copygc_get_buckets(struct moving_context *ctxt,
saw++;
- if (!bch2_bucket_is_movable(trans, &b, lru_pos_time(k.k->p)))
+ ret2 = bch2_bucket_is_movable(trans, &b, lru_pos_time(k.k->p));
+ if (ret2 < 0)
+ goto err;
+
+ if (!ret2)
not_movable++;
else if (bucket_in_flight(buckets_in_flight, b.k))
in_flight++;
else {
- ret2 = darray_push(buckets, b) ?: buckets->nr >= nr_to_get;
- if (ret2 >= 0)
- sectors += b.sectors;
+ ret2 = darray_push(buckets, b);
+ if (ret2)
+ goto err;
+ sectors += b.sectors;
}
+
+ ret2 = buckets->nr >= nr_to_get;
+err:
ret2;
}));