summaryrefslogtreecommitdiff
path: root/libbcachefs/move.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-02-12 21:40:59 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-02-12 21:41:03 -0500
commite160e9b97986d908bce40ab40ee5d930453a3bf1 (patch)
tree5ca41b36845ed409c4f97ed94d601fb8a8859455 /libbcachefs/move.c
parent157ea20eb26e214374e917813a78ecf6068db76e (diff)
Update bcachefs sources to 3e0c5b0722 fixup! bcachefs: Btree write buffer
Diffstat (limited to 'libbcachefs/move.c')
-rw-r--r--libbcachefs/move.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/libbcachefs/move.c b/libbcachefs/move.c
index 8321563d..7e7e9042 100644
--- a/libbcachefs/move.c
+++ b/libbcachefs/move.c
@@ -8,6 +8,7 @@
#include "btree_gc.h"
#include "btree_update.h"
#include "btree_update_interior.h"
+#include "btree_write_buffer.h"
#include "disk_groups.h"
#include "ec.h"
#include "errcode.h"
@@ -680,10 +681,19 @@ int __bch2_evacuate_bucket(struct moving_context *ctxt,
bkey_err(k = bch2_btree_iter_peek_slot(&iter)));
bch2_trans_iter_exit(&trans, &iter);
- if (!ret) {
- a = bch2_alloc_to_v4(k, &a_convert);
- dirty_sectors = a->dirty_sectors;
- bucket_size = bch_dev_bkey_exists(c, bucket.inode)->mi.bucket_size;
+ if (ret) {
+ bch_err(c, "%s: error looking up alloc key: %s", __func__, bch2_err_str(ret));
+ goto err;
+ }
+
+ a = bch2_alloc_to_v4(k, &a_convert);
+ dirty_sectors = a->dirty_sectors;
+ bucket_size = bch_dev_bkey_exists(c, bucket.inode)->mi.bucket_size;
+
+ ret = bch2_btree_write_buffer_flush(&trans);
+ if (ret) {
+ bch_err(c, "%s: error flushing btree write buffer: %s", __func__, bch2_err_str(ret));
+ goto err;
}
while (!(ret = move_ratelimit(&trans, ctxt))) {
@@ -712,7 +722,7 @@ int __bch2_evacuate_bucket(struct moving_context *ctxt,
if (ret)
goto err;
if (!k.k)
- continue;
+ goto next;
bch2_bkey_buf_reassemble(&sk, c, k);
k = bkey_i_to_s_c(sk.k);
@@ -763,7 +773,7 @@ int __bch2_evacuate_bucket(struct moving_context *ctxt,
if (ret)
goto err;
if (!b)
- continue;
+ goto next;
ret = bch2_btree_node_rewrite(&trans, &iter, b, 0);
bch2_trans_iter_exit(&trans, &iter);
@@ -779,7 +789,7 @@ int __bch2_evacuate_bucket(struct moving_context *ctxt,
atomic64_add(c->opts.btree_node_size >> 9, &ctxt->stats->sectors_seen);
atomic64_add(c->opts.btree_node_size >> 9, &ctxt->stats->sectors_moved);
}
-
+next:
bp_offset++;
}