};
 
 noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
-                             u64 *orig_start, u64 *orig_block_len,
+                             u64 *orig_block_len,
                              u64 *ram_bytes, struct btrfs_file_extent *file_extent,
                              bool nowait, bool strict);
 
 
        cb = alloc_compressed_bio(inode, file_offset, REQ_OP_READ,
                                  end_bbio_compressed_read);
 
-       cb->start = em->orig_start;
+       cb->start = em->start - em->offset;
        em_len = em->len;
        em_start = em->start;
 
 
                 */
                if (key.offset > start) {
                        em->start = start;
-                       em->orig_start = start;
                        em->block_start = EXTENT_MAP_HOLE;
                        em->disk_bytenr = EXTENT_MAP_HOLE;
                        em->disk_num_bytes = 0;
 
        if (!IS_ENABLED(CONFIG_BTRFS_DEBUG))
                return;
        btrfs_crit(fs_info,
-"%s, start=%llu len=%llu disk_bytenr=%llu disk_num_bytes=%llu ram_bytes=%llu offset=%llu orig_start=%llu block_start=%llu block_len=%llu flags=0x%x",
+"%s, start=%llu len=%llu disk_bytenr=%llu disk_num_bytes=%llu ram_bytes=%llu offset=%llu block_start=%llu block_len=%llu flags=0x%x",
                prefix, em->start, em->len, em->disk_bytenr, em->disk_num_bytes,
-               em->ram_bytes, em->offset, em->orig_start, em->block_start,
+               em->ram_bytes, em->offset, em->block_start,
                em->block_len, em->flags);
        ASSERT(0);
 }
                        if (em->disk_num_bytes != em->block_len)
                                dump_extent_map(fs_info,
                                        "mismatch disk_num_bytes/block_len", em);
-                       /*
-                        * Here we only check the start/orig_start/offset for
-                        * compressed extents as that's the only case where
-                        * orig_start is utilized.
-                        */
-                       if (em->orig_start != em->start - em->offset)
-                               dump_extent_map(fs_info,
-                                       "mismatch orig_start/offset/start", em);
-
                } else if (em->block_start != em->disk_bytenr + em->offset) {
                        dump_extent_map(fs_info,
                                "mismatch block_start/disk_bytenr/offset", em);
                        merge = rb_entry(rb, struct extent_map, rb_node);
                if (rb && can_merge_extent_map(merge) && mergeable_maps(merge, em)) {
                        em->start = merge->start;
-                       em->orig_start = merge->orig_start;
                        em->len += merge->len;
                        em->block_len += merge->block_len;
                        em->block_start = merge->block_start;
                        split->len = start - em->start;
 
                        if (em->block_start < EXTENT_MAP_LAST_BYTE) {
-                               split->orig_start = em->orig_start;
                                split->block_start = em->block_start;
 
                                if (compressed)
                                split->offset = em->offset;
                                split->ram_bytes = em->ram_bytes;
                        } else {
-                               split->orig_start = split->start;
                                split->block_len = 0;
                                split->block_start = em->block_start;
                                split->disk_bytenr = em->disk_bytenr;
                                split->ram_bytes = em->ram_bytes;
                                if (compressed) {
                                        split->block_len = em->block_len;
-                                       split->orig_start = em->orig_start;
                                } else {
                                        const u64 diff = end - em->start;
 
                                        split->block_len = split->len;
                                        split->block_start += diff;
-                                       split->orig_start = em->orig_start;
                                }
                        } else {
                                split->disk_num_bytes = 0;
                                split->offset = 0;
                                split->ram_bytes = split->len;
-                               split->orig_start = split->start;
                                split->block_len = 0;
                        }
 
        split_pre->disk_bytenr = new_logical;
        split_pre->disk_num_bytes = split_pre->len;
        split_pre->offset = 0;
-       split_pre->orig_start = split_pre->start;
        split_pre->block_start = new_logical;
        split_pre->block_len = split_pre->len;
        split_pre->ram_bytes = split_pre->len;
        split_mid->disk_bytenr = em->block_start + pre;
        split_mid->disk_num_bytes = split_mid->len;
        split_mid->offset = 0;
-       split_mid->orig_start = split_mid->start;
        split_mid->block_start = em->block_start + pre;
        split_mid->block_len = split_mid->len;
        split_mid->ram_bytes = split_mid->len;
 
         */
        u64 len;
 
-       /*
-        * The file offset of the original file extent before splitting.
-        *
-        * This is an in-memory only member, matching
-        * extent_map::start - btrfs_file_extent_item::offset for
-        * regular/preallocated extents. EXTENT_MAP_HOLE otherwise.
-        */
-       u64 orig_start;
-
        /*
         * The bytenr of the full on-disk extent.
         *
 
            type == BTRFS_FILE_EXTENT_PREALLOC) {
                em->start = extent_start;
                em->len = btrfs_file_extent_end(path) - extent_start;
-               em->orig_start = extent_start -
-                       btrfs_file_extent_offset(leaf, fi);
                bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
                if (bytenr == 0) {
                        em->block_start = EXTENT_MAP_HOLE;
                em->len = fs_info->sectorsize;
                em->offset = 0;
                /*
-                * Initialize orig_start and block_len with the same values
+                * Initialize block_len with the same values
                 * as in inode.c:btrfs_get_extent().
                 */
-               em->orig_start = EXTENT_MAP_HOLE;
                em->block_len = (u64)-1;
                extent_map_set_compression(em, compress_type);
        } else {
 
                                                   &cached_state);
        }
        ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes,
-                              NULL, NULL, NULL, NULL, nowait, false);
+                              NULL, NULL, NULL, nowait, false);
        if (ret <= 0)
                btrfs_drew_write_unlock(&root->snapshot_lock);
        else
                hole_em->start = offset;
                hole_em->len = end - offset;
                hole_em->ram_bytes = hole_em->len;
-               hole_em->orig_start = offset;
 
                hole_em->block_start = EXTENT_MAP_HOLE;
                hole_em->disk_bytenr = EXTENT_MAP_HOLE;
 
                                     u64 end, struct writeback_control *wbc,
                                     bool pages_dirty);
 static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start,
-                                      u64 len, u64 orig_start, u64 block_start,
+                                      u64 len, u64 block_start,
                                       u64 block_len, u64 disk_num_bytes,
                                       u64 ram_bytes, int compress_type,
                                       const struct btrfs_file_extent *file_extent,
 
        em = create_io_em(inode, start,
                          async_extent->ram_size,       /* len */
-                         start,                        /* orig_start */
                          ins.objectid,                 /* block_start */
                          ins.offset,                   /* block_len */
                          ins.offset,                   /* orig_block_len */
                            &cached);
 
                em = create_io_em(inode, start, ins.offset, /* len */
-                                 start, /* orig_start */
                                  ins.objectid, /* block_start */
                                  ins.offset, /* block_len */
                                  ins.offset, /* orig_block_len */
 
                is_prealloc = extent_type == BTRFS_FILE_EXTENT_PREALLOC;
                if (is_prealloc) {
-                       u64 orig_start = found_key.offset - nocow_args.extent_offset;
                        struct extent_map *em;
 
                        em = create_io_em(inode, cur_offset, nocow_args.num_bytes,
-                                         orig_start,
                                          nocow_args.disk_bytenr, /* block_start */
                                          nocow_args.num_bytes, /* block_len */
                                          nocow_args.disk_num_bytes, /* orig_block_len */
                        }
                        hole_em->start = cur_offset;
                        hole_em->len = hole_size;
-                       hole_em->orig_start = cur_offset;
 
                        hole_em->block_start = EXTENT_MAP_HOLE;
                        hole_em->disk_bytenr = EXTENT_MAP_HOLE;
                goto out;
        }
        em->start = EXTENT_MAP_HOLE;
-       em->orig_start = EXTENT_MAP_HOLE;
        em->disk_bytenr = EXTENT_MAP_HOLE;
        em->len = (u64)-1;
        em->block_len = (u64)-1;
 
                /* New extent overlaps with existing one */
                em->start = start;
-               em->orig_start = start;
                em->len = found_key.offset - start;
                em->block_start = EXTENT_MAP_HOLE;
                goto insert;
        }
 not_found:
        em->start = start;
-       em->orig_start = start;
        em->len = len;
        em->block_start = EXTENT_MAP_HOLE;
 insert:
                                                  struct btrfs_dio_data *dio_data,
                                                  const u64 start,
                                                  const u64 len,
-                                                 const u64 orig_start,
                                                  const u64 block_start,
                                                  const u64 block_len,
                                                  const u64 orig_block_len,
        struct btrfs_ordered_extent *ordered;
 
        if (type != BTRFS_ORDERED_NOCOW) {
-               em = create_io_em(inode, start, len, orig_start, block_start,
+               em = create_io_em(inode, start, len, block_start,
                                  block_len, orig_block_len, ram_bytes,
                                  BTRFS_COMPRESS_NONE, /* compress_type */
                                  file_extent, type);
        file_extent.ram_bytes = ins.offset;
        file_extent.offset = 0;
        file_extent.compression = BTRFS_COMPRESS_NONE;
-       em = btrfs_create_dio_extent(inode, dio_data, start, ins.offset, start,
+       em = btrfs_create_dio_extent(inode, dio_data, start, ins.offset,
                                     ins.objectid, ins.offset, ins.offset,
                                     ins.offset, BTRFS_ORDERED_REGULAR,
                                     &file_extent);
  *      any ordered extents.
  */
 noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
-                             u64 *orig_start, u64 *orig_block_len,
+                             u64 *orig_block_len,
                              u64 *ram_bytes, struct btrfs_file_extent *file_extent,
                              bool nowait, bool strict)
 {
                }
        }
 
-       if (orig_start)
-               *orig_start = key.offset - nocow_args.extent_offset;
        if (orig_block_len)
                *orig_block_len = nocow_args.disk_num_bytes;
        if (file_extent)
 
 /* The callers of this must take lock_extent() */
 static struct extent_map *create_io_em(struct btrfs_inode *inode, u64 start,
-                                      u64 len, u64 orig_start, u64 block_start,
+                                      u64 len, u64 block_start,
                                       u64 block_len, u64 disk_num_bytes,
                                       u64 ram_bytes, int compress_type,
                                       const struct btrfs_file_extent *file_extent,
                ASSERT(ram_bytes == len);
 
                /* Since it's a new extent, we should not have any offset. */
-               ASSERT(orig_start == start);
+               ASSERT(file_extent->offset == 0);
                break;
        case BTRFS_ORDERED_COMPRESSED:
                /* Must be compressed. */
                return ERR_PTR(-ENOMEM);
 
        em->start = start;
-       em->orig_start = orig_start;
        em->len = len;
        em->block_len = block_len;
        em->block_start = block_start;
        struct btrfs_file_extent file_extent;
        struct extent_map *em = *map;
        int type;
-       u64 block_start, orig_start, orig_block_len, ram_bytes;
+       u64 block_start, orig_block_len, ram_bytes;
        struct btrfs_block_group *bg;
        bool can_nocow = false;
        bool space_reserved = false;
                len = min(len, em->len - (start - em->start));
                block_start = em->block_start + (start - em->start);
 
-               if (can_nocow_extent(inode, start, &len, &orig_start,
+               if (can_nocow_extent(inode, start, &len,
                                     &orig_block_len, &ram_bytes,
                                     &file_extent, false, false) == 1) {
                        bg = btrfs_inc_nocow_writers(fs_info, block_start);
                space_reserved = true;
 
                em2 = btrfs_create_dio_extent(BTRFS_I(inode), dio_data, start, len,
-                                             orig_start, block_start,
+                                             block_start,
                                              len, orig_block_len,
                                              ram_bytes, type,
                                              &file_extent);
                }
 
                em->start = cur_offset;
-               em->orig_start = cur_offset;
                em->len = ins.offset;
                em->block_start = ins.objectid;
                em->disk_bytenr = ins.objectid;
                disk_io_size = em->block_len;
                count = em->block_len;
                encoded->unencoded_len = em->ram_bytes;
-               encoded->unencoded_offset = iocb->ki_pos - em->orig_start;
+               encoded->unencoded_offset = iocb->ki_pos - (em->start - em->offset);
                ret = btrfs_encoded_io_compression_from_extent(fs_info,
                                                               extent_map_compression(em));
                if (ret < 0)
        file_extent.offset = encoded->unencoded_offset;
        file_extent.compression = compression;
        em = create_io_em(inode, start, num_bytes,
-                         start - encoded->unencoded_offset, ins.objectid,
+                         ins.objectid,
                          ins.offset, ins.offset, ram_bytes, compression,
                          &file_extent, BTRFS_ORDERED_COMPRESSED);
        if (IS_ERR(em)) {
                free_extent_map(em);
                em = NULL;
 
-               ret = can_nocow_extent(inode, start, &len, NULL, NULL, NULL, NULL, false, true);
+               ret = can_nocow_extent(inode, start, &len, NULL, NULL, NULL, false, true);
                if (ret < 0) {
                        goto out;
                } else if (ret) {
 
                return -ENOMEM;
 
        em->start = start;
-       em->orig_start = start;
        em->len = end + 1 - start;
        em->block_len = em->len;
        em->block_start = block_start;
 
        }
 
        em->start = SZ_16K;
-       em->orig_start = SZ_16K;
        em->len = SZ_4K;
        em->block_start = SZ_32K; /* avoid merging */
        em->block_len = SZ_4K;
 
        /* Add [0, 8K), should return [0, 16K) instead. */
        em->start = start;
-       em->orig_start = start;
        em->len = len;
        em->block_start = start;
        em->block_len = len;
        }
 
        em->start = SZ_4K;
-       em->orig_start = SZ_4K;
        em->len = SZ_4K;
        em->block_start = SZ_4K;
        em->block_len = SZ_4K;
 
        /* Add [4K, 8K) */
        em->start = SZ_4K;
-       em->orig_start = SZ_4K;
        em->len = SZ_4K;
        em->block_start = SZ_4K;
        em->block_len = SZ_4K;
 
        /* Add [8K, 32K) */
        em->start = SZ_8K;
-       em->orig_start = SZ_8K;
        em->len = 24 * SZ_1K;
        em->block_start = SZ_16K; /* avoid merging */
        em->block_len = 24 * SZ_1K;
        }
        /* Add [0K, 32K) */
        em->start = 0;
-       em->orig_start = 0;
        em->len = SZ_32K;
        em->block_start = 0;
        em->block_len = SZ_32K;
        }
 
        em->start = start;
-       em->orig_start = start;
        em->len = len;
        em->block_start = block_start;
        em->block_len = SZ_4K;
        }
 
        em->start = SZ_4K;
-       em->orig_start = SZ_4K;
        em->len = SZ_4K;
        em->block_start = SZ_16K;
        em->block_len = SZ_16K;
 
        /* [32K, 48K), not pinned */
        em->start = SZ_32K;
-       em->orig_start = SZ_32K;
        em->len = SZ_16K;
        em->block_start = SZ_32K;
        em->block_len = SZ_16K;
 
                test_err("unexpected flags set, want 0 have %u", em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        offset = em->start + em->len;
                test_err("unexpected flags set, want 0 have %u", em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        disk_bytenr = em->block_start;
                test_err("unexpected flags set, want 0 have %u", em->flags);
                goto out;
        }
-       if (em->orig_start != orig_start) {
-               test_err("wrong orig offset, want %llu, have %llu",
-                        orig_start, em->orig_start);
+       if (em->start - em->offset != orig_start) {
+               test_err("wrong offset, em->start=%llu em->offset=%llu orig_start=%llu",
+                        em->start, em->offset, orig_start);
                goto out;
        }
        disk_bytenr += (em->start - orig_start);
                         prealloc_only, em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        offset = em->start + em->len;
                         prealloc_only, em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        disk_bytenr = em->block_start;
                test_err("unexpected flags set, want 0 have %u", em->flags);
                goto out;
        }
-       if (em->orig_start != orig_start) {
-               test_err("unexpected orig offset, wanted %llu, have %llu",
-                        orig_start, em->orig_start);
+       if (em->start - em->offset != orig_start) {
+               test_err("unexpected offset, wanted %llu, have %llu",
+                        em->start - orig_start, em->offset);
                goto out;
        }
-       if (em->block_start != (disk_bytenr + (em->start - em->orig_start))) {
+       if (em->block_start != disk_bytenr + em->offset) {
                test_err("unexpected block start, wanted %llu, have %llu",
-                        disk_bytenr + (em->start - em->orig_start),
-                        em->block_start);
+                        disk_bytenr + em->offset, em->block_start);
                goto out;
        }
        offset = em->start + em->len;
                         prealloc_only, em->flags);
                goto out;
        }
-       if (em->orig_start != orig_start) {
-               test_err("wrong orig offset, want %llu, have %llu", orig_start,
-                        em->orig_start);
+       if (em->start - em->offset != orig_start) {
+               test_err("wrong offset, em->start=%llu em->offset=%llu orig_start=%llu",
+                        em->start, em->offset, orig_start);
                goto out;
        }
-       if (em->block_start != (disk_bytenr + (em->start - em->orig_start))) {
+       if (em->block_start != disk_bytenr + em->offset) {
                test_err("unexpected block start, wanted %llu, have %llu",
-                        disk_bytenr + (em->start - em->orig_start),
-                        em->block_start);
+                        disk_bytenr + em->offset, em->block_start);
                goto out;
        }
        offset = em->start + em->len;
                         compressed_only, em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu",
-                        em->start, em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        if (extent_map_compression(em) != BTRFS_COMPRESS_ZLIB) {
                         compressed_only, em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu",
-                        em->start, em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        if (extent_map_compression(em) != BTRFS_COMPRESS_ZLIB) {
                test_err("unexpected flags set, want 0 have %u", em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        offset = em->start + em->len;
                         compressed_only, em->flags);
                goto out;
        }
-       if (em->orig_start != orig_start) {
-               test_err("wrong orig offset, want %llu, have %llu",
-                        em->start, orig_start);
+       if (em->start - em->offset != orig_start) {
+               test_err("wrong offset, em->start=%llu em->offset=%llu orig_start=%llu",
+                        em->start, em->offset, orig_start);
                goto out;
        }
        if (extent_map_compression(em) != BTRFS_COMPRESS_ZLIB) {
                test_err("unexpected flags set, want 0 have %u", em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        offset = em->start + em->len;
                         vacancy_only, em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong offset, want 0, have %llu", em->offset);
                goto out;
        }
        offset = em->start + em->len;
                test_err("unexpected flags set, want 0 have %u", em->flags);
                goto out;
        }
-       if (em->orig_start != em->start) {
-               test_err("wrong orig offset, want %llu, have %llu", em->start,
-                        em->orig_start);
+       if (em->offset != 0) {
+               test_err("wrong orig offset, want 0, have %llu", em->offset);
                goto out;
        }
        ret = 0;
 
        struct extent_buffer *leaf;
        struct btrfs_key key;
        enum btrfs_compression_type compress_type;
-       u64 extent_offset = em->start - em->orig_start;
+       u64 extent_offset = em->offset;
        u64 block_len;
        int ret;
 
 
                __field(        u64,  ino               )
                __field(        u64,  start             )
                __field(        u64,  len               )
-               __field(        u64,  orig_start        )
                __field(        u64,  block_start       )
                __field(        u64,  block_len         )
                __field(        u32,  flags             )
                __entry->ino            = btrfs_ino(inode);
                __entry->start          = map->start;
                __entry->len            = map->len;
-               __entry->orig_start     = map->orig_start;
                __entry->block_start    = map->block_start;
                __entry->block_len      = map->block_len;
                __entry->flags          = map->flags;
                __entry->refs           = refcount_read(&map->refs);
        ),
 
-       TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu len=%llu "
-                 "orig_start=%llu block_start=%llu(%s) "
-                 "block_len=%llu flags=%s refs=%u",
+       TP_printk_btrfs(
+"root=%llu(%s) ino=%llu start=%llu len=%llu block_start=%llu(%s) block_len=%llu flags=%s refs=%u",
                  show_root_type(__entry->root_objectid),
                  __entry->ino,
                  __entry->start,
                  __entry->len,
-                 __entry->orig_start,
                  show_map_type(__entry->block_start),
                  __entry->block_len,
                  show_map_flags(__entry->flags),