Signed-off-by: David Sterba <dsterba@suse.com>
        u64 last_dest_end = destoff;
 
        ret = -ENOMEM;
-       buf = vmalloc(root->nodesize);
-       if (!buf)
-               return ret;
+       buf = kmalloc(root->nodesize, GFP_KERNEL | __GFP_NOWARN);
+       if (!buf) {
+               buf = vmalloc(root->nodesize);
+               if (!buf)
+                       return ret;
+       }
 
        path = btrfs_alloc_path();
        if (!path) {
-               vfree(buf);
+               kvfree(buf);
                return ret;
        }
 
 
 out:
        btrfs_free_path(path);
-       vfree(buf);
+       kvfree(buf);
        return ret;
 }