mirror of
https://github.com/torvalds/linux
synced 2024-10-03 18:00:50 +00:00
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>
This commit is contained in:
parent
564fbd9dd6
commit
2798143aa8
|
@ -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 *,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue