• Jan Kara's avatar
    udf: Fix file corruption when appending just after end of preallocated extent · 36ec52ea
    Jan Kara authored
    When we append new block just after the end of preallocated extent, the
    code in inode_getblk() wrongly determined we're going to use the
    preallocated extent which resulted in adding block into a wrong logical
    offset in the file. Sequence like this manifests it:
    
    xfs_io -f -c "pwrite 0x2cacf 0xd122" -c "truncate 0x2dd6f" \
      -c "pwrite 0x27fd9 0x69a9" -c "pwrite 0x32981 0x7244" <file>
    
    The code that determined the use of preallocated extent is actually
    stale because udf_do_extend_file() does not create preallocation anymore
    so after calling that function we are sure there's no usable
    preallocation. Just remove the faulty condition.
    
    CC: stable@vger.kernel.org
    Fixes: 16d05565 ("udf: Discard preallocation before extending file with a hole")
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    36ec52ea
inode.c 65.1 KB