diff --git a/servers/slapd/back-mdb/attr.c b/servers/slapd/back-mdb/attr.c
index ade5834feee6beb9e183c74d93ef218cae8e66c3..9b7a4a9772cce58fe6bac7a6eb348f34b1237fa6 100644
--- a/servers/slapd/back-mdb/attr.c
+++ b/servers/slapd/back-mdb/attr.c
@@ -530,8 +530,12 @@ int mdb_ad_read( struct mdb_info *mdb, MDB_txn *txn )
 	AttributeDescription *ad;
 
 	rc = mdb_cursor_open( txn, mdb->mi_ad2id, &mc );
-	if ( rc )
+	if ( rc ) {
+		Debug( LDAP_DEBUG_ANY,
+			"mdb_ad_read: cursor_open failed %s(%d)\n",
+			mdb_strerror(rc), rc, 0);
 		return rc;
+	}
 
 	/* our array is 1-based, an index of 0 means no data */
 	i = mdb->mi_numads+1;
@@ -569,6 +573,9 @@ int mdb_ad_get( struct mdb_info *mdb, MDB_txn *txn, AttributeDescription *ad )
 	MDB_val key;
 
 	rc = mdb_ad_read( mdb, txn );
+	if (rc)
+		return rc;
+
 	if ( mdb->mi_adxs[ad->ad_index] )
 		return 0;
 
@@ -581,6 +588,10 @@ int mdb_ad_get( struct mdb_info *mdb, MDB_txn *txn, AttributeDescription *ad )
 		mdb->mi_adxs[ad->ad_index] = i;
 		mdb->mi_ads[i] = ad;
 		mdb->mi_numads++;
+	} else {
+		Debug( LDAP_DEBUG_ANY,
+			"mdb_ad_get: mdb_put failed %s(%d)\n",
+			mdb_strerror(rc), rc, 0);
 	}
 
 	return rc;
diff --git a/servers/slapd/back-mdb/id2entry.c b/servers/slapd/back-mdb/id2entry.c
index d3aa0c07ef04d345a4a672c02374d243ffc6944a..24e934cf47e1325ac68dce6f812ad1b2712a215b 100644
--- a/servers/slapd/back-mdb/id2entry.c
+++ b/servers/slapd/back-mdb/id2entry.c
@@ -42,12 +42,18 @@ static int mdb_id2entry_put(
 
 	rc = mdb_entry_encode( op, tid, e, &data );
 	if( rc != LDAP_SUCCESS ) {
-		return -1;
+		return LDAP_OTHER;
 	}
 
 	rc = mdb_put( tid, dbi, &key, &data, flag );
-
 	op->o_tmpfree( data.mv_data, op->o_tmpmemctx );
+	if (rc) {
+		Debug( LDAP_DEBUG_ANY,
+			"mdb_id2entry_put: mdb_put failed: %s(%d) \"%s\"\n",
+			mdb_strerror(rc), rc,
+			e->e_nname.bv_val );
+		rc = LDAP_OTHER;
+	}
 	return rc;
 }
 
@@ -482,6 +488,7 @@ static int mdb_entry_partsize(struct mdb_info *mdb, MDB_txn *txn, Entry *e,
 	eh->bv.bv_len = len;
 	eh->nattrs = nat;
 	eh->nvals = nval;
+	return 0;
 }
 
 /* Flatten an Entry into a buffer. The buffer is filled with just the
@@ -507,6 +514,7 @@ static int mdb_entry_encode(Operation *op, MDB_txn *txn, Entry *e, MDB_val *data
 		;	/* empty */
 
 	rc = mdb_entry_partsize( mdb, txn, e, &eh );
+	if (rc) return rc;
 
 	data->mv_size = eh.bv.bv_len;
 	data->mv_data = op->o_tmpalloc(data->mv_size, op->o_tmpmemctx);