• Omar Sandoval's avatar
    btrfs: get rid of one layer of bios in direct I/O · 769b4f24
    Omar Sandoval authored
    In the worst case, there are _4_ layers of bios in the Btrfs direct I/O
    path:
    
    1. The bio created by the generic direct I/O code (dio_bio).
    2. A clone of dio_bio we create in btrfs_submit_direct() to represent
       the entire direct I/O range (orig_bio).
    3. A partial clone of orig_bio limited to the size of a RAID stripe that
       we create in btrfs_submit_direct_hook().
    4. Clones of each of those split bios for each RAID stripe that we
       create in btrfs_map_bio().
    
    As of the previous commit, the second layer (orig_bio) is no longer
    needed for anything: we can split dio_bio instead, and complete dio_bio
    directly when all of the cloned bios complete. This lets us clean up a
    bunch of cruft, including dip->subio_endio and dip->errors (we can use
    dio_bio->bi_status instead). It also enables the next big cleanup of
    direct I/O read repair.
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    769b4f24
inode.c 288 KB