summaryrefslogtreecommitdiff
path: root/libbcachefs/btree_iter.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/btree_iter.c')
-rw-r--r--libbcachefs/btree_iter.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/libbcachefs/btree_iter.c b/libbcachefs/btree_iter.c
index b81a55b2..05156258 100644
--- a/libbcachefs/btree_iter.c
+++ b/libbcachefs/btree_iter.c
@@ -1672,10 +1672,11 @@ int __must_check bch2_btree_path_traverse(struct btree_trans *trans,
static void btree_path_copy(struct btree_trans *trans, struct btree_path *dst,
struct btree_path *src)
{
- unsigned i;
+ unsigned i, offset = offsetof(struct btree_path, pos);
- memcpy(&dst->pos, &src->pos,
- sizeof(struct btree_path) - offsetof(struct btree_path, pos));
+ memcpy((void *) dst + offset,
+ (void *) src + offset,
+ sizeof(struct btree_path) - offset);
for (i = 0; i < BTREE_MAX_DEPTH; i++)
if (btree_node_locked(dst, i))
@@ -3197,23 +3198,16 @@ void *bch2_trans_kmalloc(struct btree_trans *trans, size_t size)
*/
void bch2_trans_begin(struct btree_trans *trans)
{
- struct btree_insert_entry *i;
struct btree_path *path;
- trans_for_each_update(trans, i)
- __btree_path_put(i->path, true);
+ bch2_trans_reset_updates(trans);
- memset(&trans->journal_res, 0, sizeof(trans->journal_res));
- trans->extra_journal_res = 0;
- trans->nr_updates = 0;
trans->mem_top = 0;
- trans->hooks = NULL;
- trans->extra_journal_entries.nr = 0;
-
if (trans->fs_usage_deltas) {
trans->fs_usage_deltas->used = 0;
- memset(&trans->fs_usage_deltas->memset_start, 0,
+ memset((void *) trans->fs_usage_deltas +
+ offsetof(struct replicas_delta_list, memset_start), 0,
(void *) &trans->fs_usage_deltas->memset_end -
(void *) &trans->fs_usage_deltas->memset_start);
}