mdb_txn_commit(nested transaction) has more problems: - If the commit fails, it may modify the parent txn anyway. - The code to merge dirty_list into the parent is strange. I think it assumes that the dirty pages are either dirty in the parent, or have a higher page numbers than the parent's dirty pages parent. That can be wrong if a new freelist entry was used, or a "multi-page page".
Branch mdb/tweaks2 in http://folk.uio.no/hbf/OpenLDAP/openldap.git includes a suggested fix, but could use some review - and testing by someone who actually uses nested txns.