• Filipe Manana's avatar
    btrfs: add and use helper to assert an inode range is clean · 63c34cb4
    Filipe Manana authored
    We have four different scenarios where we don't expect to find ordered
    extents after locking a file range:
    
    1) During plain fallocate;
    2) During hole punching;
    3) During zero range;
    4) During reflinks (both cloning and deduplication).
    
    This is because in all these cases we follow the pattern:
    
    1) Lock the inode's VFS lock in exclusive mode;
    
    2) Lock the inode's i_mmap_lock in exclusive node, to serialize with
       mmap writes;
    
    3) Flush delalloc in a file range and wait for all ordered extents
       to complete - both done through btrfs_wait_ordered_range();
    
    4) Lock the file range in the inode's io_tree.
    
    So add a helper that asserts that we don't have ordered extents for a
    given range. Make the four scenarios listed above use this helper after
    locking the respective file range.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    63c34cb4
ctree.h 134 KB