num_bytes, parent, root_objectid,
                                           owner, offset, 1);
        if (ret == 0) {
-               BUG_ON(owner < BTRFS_FIRST_FREE_OBJECTID);
+               /*
+                * We're adding refs to a tree block we already own, this
+                * should not happen at all.
+                */
+               if (owner < BTRFS_FIRST_FREE_OBJECTID) {
+                       btrfs_crit(trans->fs_info,
+"adding refs to an existing tree ref, bytenr %llu num_bytes %llu root_objectid %llu",
+                                  bytenr, num_bytes, root_objectid);
+                       if (IS_ENABLED(CONFIG_BTRFS_DEBUG)) {
+                               WARN_ON(1);
+                               btrfs_crit(trans->fs_info,
+                       "path->slots[0]=%d path->nodes[0]:", path->slots[0]);
+                               btrfs_print_leaf(path->nodes[0]);
+                       }
+                       return -EUCLEAN;
+               }
                update_inline_extent_backref(path, iref, refs_to_add,
                                             extent_op, NULL);
        } else if (ret == -ENOENT) {
 /*
  * __btrfs_inc_extent_ref - insert backreference for a given extent
  *
+ * The counterpart is in __btrfs_free_extent(), with examples and more details
+ * how it works.
+ *
  * @trans:         Handle of transaction
  *
  * @node:          The delayed ref node used to get the bytenr/length for