bcachefs: bch2_btree_insert_nonextent()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 17 Feb 2023 04:09:27 +0000 (23:09 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:53 +0000 (17:09 -0400)
This adds a new helper to delete some redundant code in
bch2_trans_update_extent().

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_update.h
fs/bcachefs/btree_update_leaf.c
fs/bcachefs/data_update.c

index 771e4b239c66b234883363c1d222662fdbc2948b..ee1d15931022f42a4331d48e70d0f1ffaffee501 100644 (file)
@@ -58,6 +58,9 @@ int bch2_btree_delete_extent_at(struct btree_trans *, struct btree_iter *,
                                unsigned, unsigned);
 int bch2_btree_delete_at(struct btree_trans *, struct btree_iter *, unsigned);
 
+int bch2_btree_insert_nonextent(struct btree_trans *, enum btree_id,
+                               struct bkey_i *, enum btree_update_flags);
+
 int __bch2_btree_insert(struct btree_trans *, enum btree_id, struct bkey_i *,
                        enum btree_update_flags);
 int bch2_btree_insert(struct bch_fs *, enum btree_id, struct bkey_i *,
index 3773439d031a50b0dd4020d4933245afa18b3590..0fc98b43a07337bba846036ba135c3802e9829c2 100644 (file)
@@ -1312,7 +1312,7 @@ int bch2_trans_update_extent(struct btree_trans *trans,
                             struct bkey_i *insert,
                             enum btree_update_flags flags)
 {
-       struct btree_iter iter, update_iter;
+       struct btree_iter iter;
        struct bpos start = bkey_start_pos(&insert->k);
        struct bkey_i *update;
        struct bkey_s_c k;
@@ -1360,16 +1360,8 @@ int bch2_trans_update_extent(struct btree_trans *trans,
 
                        bch2_cut_back(start, update);
 
-                       bch2_trans_iter_init(trans, &update_iter, btree_id, update->k.p,
-                                            BTREE_ITER_NOT_EXTENTS|
-                                            BTREE_ITER_ALL_SNAPSHOTS|
-                                            BTREE_ITER_INTENT);
-                       ret   = bch2_btree_iter_traverse(&update_iter) ?:
-                               bch2_trans_update(trans, &update_iter, update,
-                                                 BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|
-                                                 flags);
-                       bch2_trans_iter_exit(trans, &update_iter);
-
+                       ret = bch2_btree_insert_nonextent(trans, btree_id, update,
+                                                 BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|flags);
                        if (ret)
                                goto err;
                }
@@ -1383,15 +1375,8 @@ int bch2_trans_update_extent(struct btree_trans *trans,
                        bch2_cut_front(start, update);
                        bch2_cut_back(insert->k.p, update);
 
-                       bch2_trans_iter_init(trans, &update_iter, btree_id, update->k.p,
-                                            BTREE_ITER_NOT_EXTENTS|
-                                            BTREE_ITER_ALL_SNAPSHOTS|
-                                            BTREE_ITER_INTENT);
-                       ret   = bch2_btree_iter_traverse(&update_iter) ?:
-                               bch2_trans_update(trans, &update_iter, update,
-                                                 BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|
-                                                 flags);
-                       bch2_trans_iter_exit(trans, &update_iter);
+                       ret = bch2_btree_insert_nonextent(trans, btree_id, update,
+                                                 BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|flags);
                        if (ret)
                                goto err;
                }
@@ -1409,15 +1394,9 @@ int bch2_trans_update_extent(struct btree_trans *trans,
                                update->k.type = KEY_TYPE_whiteout;
                        }
 
-                       bch2_trans_iter_init(trans, &update_iter, btree_id, update->k.p,
-                                            BTREE_ITER_NOT_EXTENTS|
-                                            BTREE_ITER_INTENT);
-                       ret   = bch2_btree_iter_traverse(&update_iter) ?:
-                               bch2_trans_update(trans, &update_iter, update,
-                                                 BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|
-                                                 flags);
-                       bch2_trans_iter_exit(trans, &update_iter);
 
+                       ret = bch2_btree_insert_nonextent(trans, btree_id, update,
+                                                 BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|flags);
                        if (ret)
                                goto err;
                }
@@ -1748,8 +1727,23 @@ void bch2_trans_commit_hook(struct btree_trans *trans,
        trans->hooks = h;
 }
 
-int __bch2_btree_insert(struct btree_trans *trans,
-                       enum btree_id id,
+int bch2_btree_insert_nonextent(struct btree_trans *trans,
+                               enum btree_id btree, struct bkey_i *k,
+                               enum btree_update_flags flags)
+{
+       struct btree_iter iter;
+       int ret;
+
+       bch2_trans_iter_init(trans, &iter, btree, k->k.p,
+                            BTREE_ITER_NOT_EXTENTS|
+                            BTREE_ITER_INTENT);
+       ret   = bch2_btree_iter_traverse(&iter) ?:
+               bch2_trans_update(trans, &iter, k, flags);
+       bch2_trans_iter_exit(trans, &iter);
+       return ret;
+}
+
+int __bch2_btree_insert(struct btree_trans *trans, enum btree_id id,
                        struct bkey_i *k, enum btree_update_flags flags)
 {
        struct btree_iter iter;
index 04d56e960872af0b954ccb6f6f97ec2feb16120d..09a5fff339fe61f4d41a847d3531a8423d714c9f 100644 (file)
@@ -21,7 +21,7 @@ static int insert_snapshot_whiteouts(struct btree_trans *trans,
                                     struct bpos new_pos)
 {
        struct bch_fs *c = trans->c;
-       struct btree_iter iter, update_iter;
+       struct btree_iter iter;
        struct bkey_s_c k;
        snapshot_id_list s;
        int ret;
@@ -65,14 +65,8 @@ static int insert_snapshot_whiteouts(struct btree_trans *trans,
                        update->k.p = new_pos;
                        update->k.p.snapshot = k.k->p.snapshot;
 
-                       bch2_trans_iter_init(trans, &update_iter, id, update->k.p,
-                                            BTREE_ITER_NOT_EXTENTS|
-                                            BTREE_ITER_ALL_SNAPSHOTS|
-                                            BTREE_ITER_INTENT);
-                       ret   = bch2_btree_iter_traverse(&update_iter) ?:
-                               bch2_trans_update(trans, &update_iter, update,
+                       ret  = bch2_btree_insert_nonextent(trans, id, update,
                                          BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE);
-                       bch2_trans_iter_exit(trans, &update_iter);
                        if (ret)
                                break;