From: Andre Noll <maan@systemlinux.org>
Date: Sun, 10 Jan 2010 17:22:49 +0000 (+0100)
Subject: [btr]: Avoid large memcpy()s when creating the wrap buffers.
X-Git-Tag: v0.4.2~169
X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=e3acf84bf26f2730575624b1a1d3979d84272427;p=paraslash.git

[btr]: Avoid large memcpy()s when creating the wrap buffers.
---

diff --git a/buffer_tree.c b/buffer_tree.c
index 8aa66b6c..dfecf10a 100644
--- a/buffer_tree.c
+++ b/buffer_tree.c
@@ -622,11 +622,16 @@ next:
 		if (sz1 + sz2 >= dest_size)
 			break;
 	}
+	/*
+	 * If the second buffer is large, we only take the first part of it to
+	 * avoid having to memcpy() huge buffers.
+	 */
+	sz2 = PARA_MIN(sz2, (size_t)(64 * 1024));
 	if (!wbr) {
 		assert(buf1);
 		if (!buf2) /* nothing to do */
 			return;
-		/* make a new wrap buffer combining buf1 and buf 2. */
+		/* Make a new wrap buffer combining buf1 and buf2. */
 		sz = sz1 + sz2;
 		buf = para_malloc(sz);
 		PARA_DEBUG_LOG("merging input buffers: (%p:%zu, %p:%zu) -> %p:%zu\n",