Commit 35c8eda1 authored by Robbie Ko's avatar Robbie Ko Committed by David Sterba

btrfs: incremental send, move allocation until it's needed in orphan_dir_info

Move the allocation after the search when it's clear that the new entry
will be added.
Signed-off-by: default avatarRobbie Ko <robbieko@synology.com>
Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
[ update changelog ]
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 2335efaf
...@@ -2844,12 +2844,6 @@ add_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino) ...@@ -2844,12 +2844,6 @@ add_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino)
struct rb_node *parent = NULL; struct rb_node *parent = NULL;
struct orphan_dir_info *entry, *odi; struct orphan_dir_info *entry, *odi;
odi = kmalloc(sizeof(*odi), GFP_KERNEL);
if (!odi)
return ERR_PTR(-ENOMEM);
odi->ino = dir_ino;
odi->gen = 0;
while (*p) { while (*p) {
parent = *p; parent = *p;
entry = rb_entry(parent, struct orphan_dir_info, node); entry = rb_entry(parent, struct orphan_dir_info, node);
...@@ -2858,11 +2852,16 @@ add_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino) ...@@ -2858,11 +2852,16 @@ add_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino)
} else if (dir_ino > entry->ino) { } else if (dir_ino > entry->ino) {
p = &(*p)->rb_right; p = &(*p)->rb_right;
} else { } else {
kfree(odi);
return entry; return entry;
} }
} }
odi = kmalloc(sizeof(*odi), GFP_KERNEL);
if (!odi)
return ERR_PTR(-ENOMEM);
odi->ino = dir_ino;
odi->gen = 0;
rb_link_node(&odi->node, parent, p); rb_link_node(&odi->node, parent, p);
rb_insert_color(&odi->node, &sctx->orphan_dirs); rb_insert_color(&odi->node, &sctx->orphan_dirs);
return odi; return odi;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment