• Wang Shilong's avatar
    Btrfs: fix wrong extent mapping for DirectIO · e2eca69d
    Wang Shilong authored
    btrfs_next_leaf() will use current leaf's last key to search
    and then return a bigger one. So it may still return a file extent
    item that is smaller than expected value and we will
    get an overflow here for @em->len.
    
    This is easy to reproduce for Btrfs Direct writting, it did not
    cause any problem, because writting will re-insert right mapping later.
    
    However, by hacking code to make DIO support compression, wrong extent
    mapping is kept and it encounter merging failure(EEXIST) quickly.
    
    Fix this problem by looping to find next file extent item that is bigger
    than @start or we could not find anything more.
    Signed-off-by: default avatarWang Shilong <wangsl.fnst@cn.fujitsu.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.cz>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    e2eca69d
inode.c 239 KB