On 22/01/2021 16:24, Josef Bacik wrote: >> + em_new = create_io_em(inode, em->start + pre, len, >> + em->start + pre, em->block_start + pre, len, >> + len, len, BTRFS_COMPRESS_NONE, >> + BTRFS_ORDERED_REGULAR); > This bit confuses me, the io_em is just so we have a mapping to an area that's > being written to, and this is created at ordered extent time. I get why we need > to split up the ordered extent, but the existing io_em should be fine, right? unpin_extent_cache() needs em->start != start or it'll WARN there, I'll add a comment.