• Filipe Manana's avatar
    btrfs: lock the inode first before flushing range when punching hole · bd6526d0
    Filipe Manana authored
    When doing hole punching we are flushing delalloc and waiting for ordered
    extents to complete before locking the inode (VFS lock and the btrfs
    specific i_mmap_lock). This is fine because even if a write happens after
    we call btrfs_wait_ordered_range() and before we lock the inode (call
    btrfs_inode_lock()), we will notice the write at
    btrfs_punch_hole_lock_range() and flush delalloc and wait for its ordered
    extent.
    
    We can however make this simpler by locking first the inode an then call
    btrfs_wait_ordered_range(), which will allow us to remove the ordered
    extent lookup logic from btrfs_punch_hole_lock_range() in the next patch.
    It also makes the behaviour the same as plain fallocate, hole punching
    and reflinks.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    bd6526d0
file.c 104 KB