• Christoph Hellwig's avatar
    btrfs: defer splitting of ordered extents until I/O completion · 71df088c
    Christoph Hellwig authored
    The btrfs zoned completion code currently needs an ordered_extent and
    extent_map per bio so that it can account for the non-predictable
    write location from Zone Append.  To archive that it currently splits
    the ordered_extent and extent_map at I/O submission time, and then
    records the actual physical address in the ->physical field of the
    ordered_extent.
    
    This patch instead switches to record the "original" physical address
    that the btrfs allocator assigned in spare space in the btrfs_bio,
    and then rewrites the logical address in the btrfs_ordered_sum
    structure at I/O completion time.  This allows the ordered extent
    completion handler to simply walk the list of ordered csums and
    split the ordered extent as needed.  This removes an extra ordered
    extent and extent_map lookup and manipulation during the I/O
    submission path, and instead batches it in the I/O completion path
    where we need to touch these anyway.
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    71df088c
inode.c 315 KB