]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/data_update.c
Update bcachefs sources to 7c0fe6f104 bcachefs: Fix bch2_fsck_ask_yn()
[bcachefs-tools-debian] / libbcachefs / data_update.c
index c709538ce9c2e432e6606eecd52d541067d763c0..c89ee14f8b6b8b5ce7fcbd5f5e963df65abdcfaf 100644 (file)
 #include "subvolume.h"
 #include "trace.h"
 
-static int insert_snapshot_whiteouts(struct btree_trans *trans,
-                                    enum btree_id id,
-                                    struct bpos old_pos,
-                                    struct bpos new_pos)
-{
-       struct bch_fs *c = trans->c;
-       struct btree_iter iter, iter2;
-       struct bkey_s_c k, k2;
-       snapshot_id_list s;
-       struct bkey_i *update;
-       int ret;
-
-       if (!btree_type_has_snapshots(id))
-               return 0;
-
-       darray_init(&s);
-
-       if (!bch2_snapshot_has_children(c, old_pos.snapshot))
-               return 0;
-
-       bch2_trans_iter_init(trans, &iter, id, old_pos,
-                            BTREE_ITER_NOT_EXTENTS|
-                            BTREE_ITER_ALL_SNAPSHOTS);
-       while (1) {
-               k = bch2_btree_iter_prev(&iter);
-               ret = bkey_err(k);
-               if (ret)
-                       break;
-
-               if (!k.k)
-                       break;
-
-               if (!bkey_eq(old_pos, k.k->p))
-                       break;
-
-               if (bch2_snapshot_is_ancestor(c, k.k->p.snapshot, old_pos.snapshot) &&
-                   !snapshot_list_has_ancestor(c, &s, k.k->p.snapshot)) {
-                       struct bpos whiteout_pos = new_pos;
-
-                       whiteout_pos.snapshot = k.k->p.snapshot;
-
-                       k2 = bch2_bkey_get_iter(trans, &iter2, id, whiteout_pos,
-                                               BTREE_ITER_NOT_EXTENTS|
-                                               BTREE_ITER_INTENT);
-                       ret = bkey_err(k2);
-
-                       if (!ret && k2.k->type == KEY_TYPE_deleted) {
-                               update = bch2_trans_kmalloc(trans, sizeof(struct bkey_i));
-                               ret = PTR_ERR_OR_ZERO(update);
-                               if (ret)
-                                       break;
-
-                               bkey_init(&update->k);
-                               update->k.p             = whiteout_pos;
-                               update->k.type          = KEY_TYPE_whiteout;
-
-                               ret = bch2_trans_update(trans, &iter2, update,
-                                                       BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE);
-                       }
-                       bch2_trans_iter_exit(trans, &iter2);
-
-                       if (ret)
-                               break;
-
-                       ret = snapshot_list_add(c, &s, k.k->p.snapshot);
-                       if (ret)
-                               break;
-               }
-       }
-       bch2_trans_iter_exit(trans, &iter);
-       darray_exit(&s);
-
-       return ret;
-}
-
 static void trace_move_extent_finish2(struct bch_fs *c, struct bkey_s_c k)
 {
        if (trace_move_extent_finish_enabled()) {
@@ -327,19 +252,12 @@ restart_drop_extra_replicas:
 
                next_pos = insert->k.p;
 
-               if (!bkey_eq(bkey_start_pos(&insert->k), bkey_start_pos(k.k))) {
-                       ret = insert_snapshot_whiteouts(trans, m->btree_id, k.k->p,
-                                                       bkey_start_pos(&insert->k));
-                       if (ret)
-                               goto err;
-               }
-
-               if (!bkey_eq(insert->k.p, k.k->p)) {
-                       ret = insert_snapshot_whiteouts(trans, m->btree_id,
-                                                       k.k->p, insert->k.p);
-                       if (ret)
-                               goto err;
-               }
+               ret =   bch2_insert_snapshot_whiteouts(trans, m->btree_id,
+                                               k.k->p, bkey_start_pos(&insert->k)) ?:
+                       bch2_insert_snapshot_whiteouts(trans, m->btree_id,
+                                               k.k->p, insert->k.p);
+               if (ret)
+                       goto err;
 
                ret   = bch2_trans_update(trans, &iter, insert,
                                BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE) ?:
@@ -374,7 +292,7 @@ nowork:
                                     &m->ctxt->stats->sectors_raced);
                }
 
-               this_cpu_add(c->counters[BCH_COUNTER_move_extent_fail], new->k.size);
+               this_cpu_inc(c->counters[BCH_COUNTER_move_extent_fail]);
 
                bch2_btree_iter_advance(&iter);
                goto next;