Avoid the overhead of allocating an orphan_dir_info object unnecessarily.

Signed-off-by: Robbie Ko <[email protected]>
---
 fs/btrfs/send.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index 579a4c8..9c60421 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -2785,12 +2785,6 @@ add_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino)
        struct rb_node *parent = NULL;
        struct orphan_dir_info *entry, *odi;
 
-       odi = kmalloc(sizeof(*odi), GFP_NOFS);
-       if (!odi)
-               return ERR_PTR(-ENOMEM);
-       odi->ino = dir_ino;
-       odi->gen = 0;
-
        while (*p) {
                parent = *p;
                entry = rb_entry(parent, struct orphan_dir_info, node);
@@ -2799,11 +2793,16 @@ add_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino)
                } else if (dir_ino > entry->ino) {
                        p = &(*p)->rb_right;
                } else {
-                       kfree(odi);
                        return entry;
                }
        }
 
+       odi = kmalloc(sizeof(*odi), GFP_NOFS);
+       if (!odi)
+               return ERR_PTR(-ENOMEM);
+       odi->ino = dir_ino;
+       odi->gen = 0;
+
        rb_link_node(&odi->node, parent, p);
        rb_insert_color(&odi->node, &sctx->orphan_dirs);
        return odi;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in

Reply via email to