From d836a705477d813cb90f4172c5ef8caa3be94727 Mon Sep 17 00:00:00 2001
From: marko <Unknown>
Date: Wed, 5 Nov 2008 15:13:09 +0000
Subject: [PATCH] branches/innodb+: ibuf_insert_low(): Ignore the free bits in
 the insert buffer bitmap when buffering deletes or delete-marks.

TODO: ibuf_get_volume_buffered() should return only the volume of
the buffered inserts, not deletes or delete-marks.
---
 ibuf/ibuf0ibuf.c | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/ibuf/ibuf0ibuf.c b/ibuf/ibuf0ibuf.c
index 9f3f5547238..15bf777407e 100644
--- a/ibuf/ibuf0ibuf.c
+++ b/ibuf/ibuf0ibuf.c
@@ -2999,7 +2999,6 @@ ibuf_insert_low(
 	ib_int64_t	space_versions[IBUF_MAX_N_PAGES_MERGED];
 	ulint		page_nos[IBUF_MAX_N_PAGES_MERGED];
 	ulint		n_stored;
-	ulint		bits;
 	mtr_t		mtr;
 	mtr_t		bitmap_mtr;
 
@@ -3115,23 +3114,27 @@ ibuf_insert_low(
 		goto function_exit;
 	}
 
-	bits = ibuf_bitmap_page_get_bits(bitmap_page, page_no, zip_size,
-					 IBUF_BITMAP_FREE, &bitmap_mtr);
+	if (op == IBUF_OP_INSERT) {
+		ulint	bits = ibuf_bitmap_page_get_bits(
+			bitmap_page, page_no, zip_size, IBUF_BITMAP_FREE,
+			&bitmap_mtr);
 
-	if (buffered + entry_size + page_dir_calc_reserved_space(1)
-	    > ibuf_index_page_calc_free_from_bits(zip_size, bits)) {
-		mtr_commit(&bitmap_mtr);
+		if (buffered + entry_size + page_dir_calc_reserved_space(1)
+		    > ibuf_index_page_calc_free_from_bits(zip_size, bits)) {
+			mtr_commit(&bitmap_mtr);
 
-		/* It may not fit */
-		err = DB_STRONG_FAIL;
+			/* It may not fit */
+			err = DB_STRONG_FAIL;
 
-		do_merge = TRUE;
+			do_merge = TRUE;
 
-		ibuf_get_merge_page_nos(
-			FALSE, btr_pcur_get_rec(&pcur),
-			space_ids, space_versions, page_nos, &n_stored);
+			ibuf_get_merge_page_nos(
+				FALSE, btr_pcur_get_rec(&pcur),
+				space_ids, space_versions,
+				page_nos, &n_stored);
 
-		goto function_exit;
+			goto function_exit;
+		}
 	}
 
 	/* Patch correct counter value to the entry to insert. This can