]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/move.c
Fix build when CONFIG_BCACHEFS_DEBUG=y
[bcachefs-tools-debian] / libbcachefs / move.c
index 67e9fd3f86f52169f985a6eb6c51e90c6ea10885..11a92c099afd0528f9076ff957d7035b034b24bd 100644 (file)
@@ -70,19 +70,26 @@ static int bch2_migrate_index_update(struct bch_write_op *op)
                                   BTREE_ITER_SLOTS|BTREE_ITER_INTENT);
 
        while (1) {
-               struct bkey_s_c k = bch2_btree_iter_peek_slot(iter);
+               struct bkey_s_c k;
                struct bkey_i *insert;
-               struct bkey_i_extent *new =
-                       bkey_i_to_extent(bch2_keylist_front(keys));
+               struct bkey_i_extent *new;
                BKEY_PADDED(k) _new, _insert;
                const union bch_extent_entry *entry;
                struct extent_ptr_decoded p;
                bool did_work = false;
                int nr;
 
+               bch2_trans_reset(&trans, 0);
+
+               k = bch2_btree_iter_peek_slot(iter);
                ret = bkey_err(k);
-               if (ret)
+               if (ret) {
+                       if (ret == -EINTR)
+                               continue;
                        break;
+               }
+
+               new = bkey_i_to_extent(bch2_keylist_front(keys));
 
                if (bversion_cmp(k.k->version, new->k.version) ||
                    !bch2_bkey_matches_ptr(c, k, m->ptr, m->offset))
@@ -150,7 +157,7 @@ static int bch2_migrate_index_update(struct bch_write_op *op)
                        goto next;
                }
 
-               bch2_trans_update(&trans, iter, insert);
+               bch2_trans_update(&trans, iter, insert, 0);
 
                ret = bch2_trans_commit(&trans, &op->res,
                                op_journal_seq(op),
@@ -215,6 +222,9 @@ int bch2_migrate_write_init(struct bch_fs *c, struct migrate_write *m,
                            enum btree_id btree_id,
                            struct bkey_s_c k)
 {
+       struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
+       const union bch_extent_entry *entry;
+       struct extent_ptr_decoded p;
        int ret;
 
        m->btree_id     = btree_id;
@@ -223,9 +233,14 @@ int bch2_migrate_write_init(struct bch_fs *c, struct migrate_write *m,
        m->nr_ptrs_reserved = 0;
 
        bch2_write_op_init(&m->op, c, io_opts);
-       m->op.compression_type =
-               bch2_compression_opt_to_type[io_opts.background_compression ?:
-                                            io_opts.compression];
+
+       if (!bch2_bkey_is_incompressible(k))
+               m->op.compression_type =
+                       bch2_compression_opt_to_type[io_opts.background_compression ?:
+                                                    io_opts.compression];
+       else
+               m->op.incompressible = true;
+
        m->op.target    = data_opts.target,
        m->op.write_point = wp;
 
@@ -235,7 +250,8 @@ int bch2_migrate_write_init(struct bch_fs *c, struct migrate_write *m,
        m->op.flags |= BCH_WRITE_ONLY_SPECIFIED_DEVS|
                BCH_WRITE_PAGES_STABLE|
                BCH_WRITE_PAGES_OWNED|
-               BCH_WRITE_DATA_ENCODED;
+               BCH_WRITE_DATA_ENCODED|
+               BCH_WRITE_FROM_INTERNAL;
 
        m->op.nr_replicas       = 1;
        m->op.nr_replicas_required = 1;
@@ -265,14 +281,11 @@ int bch2_migrate_write_init(struct bch_fs *c, struct migrate_write *m,
                break;
        }
        case DATA_REWRITE: {
-               struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
-               const union bch_extent_entry *entry;
-               struct extent_ptr_decoded p;
                unsigned compressed_sectors = 0;
 
                bkey_for_each_ptr_decode(k.k, ptrs, p, entry)
                        if (!p.ptr.cached &&
-                           p.crc.compression_type != BCH_COMPRESSION_TYPE_none &&
+                           crc_is_compressed(p.crc) &&
                            bch2_dev_in_target(c, p.ptr.dev, data_opts.target))
                                compressed_sectors += p.crc.compressed_size;
 
@@ -762,14 +775,8 @@ int bch2_data_job(struct bch_fs *c,
 
                ret = bch2_move_btree(c, rereplicate_pred, c, stats) ?: ret;
 
-               while (1) {
-                       closure_wait_event(&c->btree_interior_update_wait,
-                                          !bch2_btree_interior_updates_nr_pending(c) ||
-                                          c->btree_roots_dirty);
-                       if (!bch2_btree_interior_updates_nr_pending(c))
-                               break;
-                       bch2_journal_meta(&c->journal);
-               }
+               closure_wait_event(&c->btree_interior_update_wait,
+                                  !bch2_btree_interior_updates_nr_pending(c));
 
                ret = bch2_replicas_gc2(c) ?: ret;