• Filipe Manana's avatar
    Btrfs: add missing inode item update in fallocate() · 3d850dd4
    Filipe Manana authored
    If we fallocate(), without the keep size flag, into an area already covered
    by an extent previously fallocated, we were updating the inode's i_size but
    we weren't updating the inode item in the fs/subvol tree. A following umount
    + mount would result in a loss of the inode's size (and an fsync would miss
    too the fact that the inode changed).
    
    Reproducer:
    
      $ mkfs.btrfs -f /dev/sdd
      $ mount /dev/sdd /mnt
      $ fallocate -n -l 1M /mnt/foobar
      $ fallocate -l 512K /mnt/foobar
      $ umount /mnt
      $ mount /dev/sdd /mnt
      $ od -t x1 /mnt/foobar
      0000000
    
    The expected result is:
    
      $ od -t x1 /mnt/foobar
      0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      *
      2000000
    
    A test case for fstests follows soon.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Reviewed-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    3d850dd4
file.c 76.4 KB