diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-02-16 23:09:27 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:53 -0400 |
commit | 2798143aa8eb796be19775dcb5ae3927bf983730 (patch) | |
tree | 9eab33da25a9ddc03df8f844118127f394a92c72 | |
parent | 564fbd9dd6329abde8aca143da26ffbada13ff7d (diff) | |
download | lwn-2798143aa8eb796be19775dcb5ae3927bf983730.tar.gz lwn-2798143aa8eb796be19775dcb5ae3927bf983730.zip |
bcachefs: bch2_btree_insert_nonextent()
This adds a new helper to delete some redundant code in
bch2_trans_update_extent().
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/btree_update.h | 3 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 54 | ||||
-rw-r--r-- | fs/bcachefs/data_update.c | 10 |
3 files changed, 29 insertions, 38 deletions
diff --git a/fs/bcachefs/btree_update.h b/fs/bcachefs/btree_update.h index 771e4b239c66..ee1d15931022 100644 --- a/fs/bcachefs/btree_update.h +++ b/fs/bcachefs/btree_update.h @@ -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 *, diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index 3773439d031a..0fc98b43a073 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -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; diff --git a/fs/bcachefs/data_update.c b/fs/bcachefs/data_update.c index 04d56e960872..09a5fff339fe 100644 --- a/fs/bcachefs/data_update.c +++ b/fs/bcachefs/data_update.c @@ -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; |