From 98f3bc88bf4b268f14b9c415aa138dfdd05bfe05 Mon Sep 17 00:00:00 2001
From: Hallvard Furuseth <hallvard@openldap.org>
Date: Mon, 13 Jan 2014 20:46:08 +0100
Subject: [PATCH] Revert "ITS#7772 Reduce spurious sub-page growth."

This reverts commit 75494c08b49c3ef77dce8a00f2bc44c83658c1a7,
which must await a fix to ITS#7771 (DUPSORT cursor tracking).
---
 libraries/liblmdb/mdb.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index 6ca890fdf3..7e2905891e 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -5912,7 +5912,7 @@ more:
 			 * it.  mp: new (sub-)page.  offset: growth in page
 			 * size.  xdata: node data with new page or DB.
 			 */
-			ssize_t		i, offset = 0;
+			unsigned	i, offset = 0;
 			mp = fp = xdata.mv_data = env->me_pbuf;
 			mp->mp_pgno = mc->mc_pg[mc->mc_top]->mp_pgno;
 
@@ -5968,17 +5968,17 @@ more:
 				fp = olddata.mv_data;
 				switch (flags) {
 				default:
-					i = -(ssize_t)SIZELEFT(fp);
 					if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) {
-						offset = i += (ssize_t) EVEN(
-							sizeof(indx_t) + NODESIZE + data->mv_size);
-					} else {
-						i += offset = fp->mp_pad;
-						offset *= 4; /* space for 4 more */
+						offset = EVEN(NODESIZE + sizeof(indx_t) +
+							data->mv_size);
+						break;
 					}
-					if (i > 0)
+					offset = fp->mp_pad;
+					if (SIZELEFT(fp) < offset) {
+						offset *= 4; /* space for 4 more */
 						break;
-					/* FALLTHRU: Sub-page is big enough */
+					}
+					/* FALLTHRU: Big enough MDB_DUPFIXED sub-page */
 				case MDB_CURRENT:
 					fp->mp_flags |= P_DIRTY;
 					COPY_PGNO(fp->mp_pgno, mp->mp_pgno);
@@ -6027,7 +6027,7 @@ prep_subDB:
 				} else {
 					memcpy((char *)mp + mp->mp_upper, (char *)fp + fp->mp_upper,
 						olddata.mv_size - fp->mp_upper);
-					for (i = NUMKEYS(fp); --i >= 0; )
+					for (i=0; i<NUMKEYS(fp); i++)
 						mp->mp_ptrs[i] = fp->mp_ptrs[i] + offset;
 				}
 			}
-- 
GitLab