]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/io_misc.c
Update bcachefs sources to 0d63ed13ea3d closures: Fix race in closure_sync()
[bcachefs-tools-debian] / libbcachefs / io_misc.c
index 119834cb8f9ee7f80c10b504ca8602ae5614ac37..0979d5e05713e4769af3b8ff299d7b0a737a7ce7 100644 (file)
@@ -16,6 +16,7 @@
 #include "io_misc.h"
 #include "io_write.h"
 #include "logged_ops.h"
+#include "rebalance.h"
 #include "subvolume.h"
 
 /* Overwrites whatever was present with zeroes: */
@@ -355,6 +356,7 @@ static int __bch2_resume_logged_op_finsert(struct btree_trans *trans,
        struct btree_iter iter;
        struct bkey_i_logged_op_finsert *op = bkey_i_to_logged_op_finsert(op_k);
        subvol_inum inum = { le32_to_cpu(op->v.subvol), le64_to_cpu(op->v.inum) };
+       struct bch_io_opts opts;
        u64 dst_offset = le64_to_cpu(op->v.dst_offset);
        u64 src_offset = le64_to_cpu(op->v.src_offset);
        s64 shift = dst_offset - src_offset;
@@ -363,6 +365,10 @@ static int __bch2_resume_logged_op_finsert(struct btree_trans *trans,
        bool insert = shift > 0;
        int ret = 0;
 
+       ret = bch2_inum_opts_get(trans, inum, &opts);
+       if (ret)
+               return ret;
+
        bch2_trans_iter_init(trans, &iter, BTREE_ID_extents,
                             POS(inum.inum, 0),
                             BTREE_ITER_INTENT);
@@ -443,7 +449,10 @@ case LOGGED_OP_FINSERT_shift_extents:
 
                op->v.pos = cpu_to_le64(insert ? bkey_start_offset(&delete.k) : delete.k.p.offset);
 
-               ret =   bch2_btree_insert_trans(trans, BTREE_ID_extents, &delete, 0) ?:
+               ret =   bch2_bkey_set_needs_rebalance(c, copy,
+                                       opts.background_target,
+                                       opts.background_compression) ?:
+                       bch2_btree_insert_trans(trans, BTREE_ID_extents, &delete, 0) ?:
                        bch2_btree_insert_trans(trans, BTREE_ID_extents, copy, 0) ?:
                        bch2_logged_op_update(trans, &op->k_i) ?:
                        bch2_trans_commit(trans, &disk_res, NULL, BTREE_INSERT_NOFAIL);