u64 other_end;
        u64 split = start;
        u64 locked_end = end;
+       u64 orig_parent;
        int extent_type;
        int split_end = 1;
        int ret;
        }
 
        btrfs_mark_buffer_dirty(leaf);
+
+       orig_parent = leaf->start;
+       ret = btrfs_inc_extent_ref(trans, root, bytenr, num_bytes,
+                                  orig_parent, root->root_key.objectid,
+                                  trans->transid, inode->i_ino);
+       BUG_ON(ret);
        btrfs_release_path(root, path);
 
        key.offset = start;
        btrfs_set_file_extent_encryption(leaf, fi, 0);
        btrfs_set_file_extent_other_encoding(leaf, fi, 0);
 
-       ret = btrfs_inc_extent_ref(trans, root, bytenr, num_bytes,
-                                  leaf->start, root->root_key.objectid,
-                                  trans->transid, inode->i_ino);
-       BUG_ON(ret);
+       if (orig_parent != leaf->start) {
+               ret = btrfs_update_extent_ref(trans, root, bytenr,
+                                             orig_parent, leaf->start,
+                                             root->root_key.objectid,
+                                             trans->transid, inode->i_ino);
+               BUG_ON(ret);
+       }
 done:
        btrfs_mark_buffer_dirty(leaf);
        btrfs_release_path(root, path);