btrfs_node_key(mid, &disk_key, 0);
                        ret = btrfs_tree_mod_log_insert_key(parent, pslot,
                                        BTRFS_MOD_LOG_KEY_REPLACE);
-                       BUG_ON(ret < 0);
+                       if (ret < 0) {
+                               btrfs_tree_unlock(left);
+                               free_extent_buffer(left);
+                               btrfs_abort_transaction(trans, ret);
+                               return ret;
+                       }
                        btrfs_set_node_key(parent, &disk_key, pslot);
                        btrfs_mark_buffer_dirty(parent);
                        if (btrfs_header_nritems(left) > orig_slot) {
                        btrfs_node_key(right, &disk_key, 0);
                        ret = btrfs_tree_mod_log_insert_key(parent, pslot + 1,
                                        BTRFS_MOD_LOG_KEY_REPLACE);
-                       BUG_ON(ret < 0);
+                       if (ret < 0) {
+                               btrfs_tree_unlock(right);
+                               free_extent_buffer(right);
+                               btrfs_abort_transaction(trans, ret);
+                               return ret;
+                       }
                        btrfs_set_node_key(parent, &disk_key, pslot + 1);
                        btrfs_mark_buffer_dirty(parent);