• Namjae Jeon's avatar
    fat: add fat_fallocate operation · b13bb33e
    Namjae Jeon authored
    Implement preallocation via the fallocate syscall on VFAT partitions.
    This patch is based on an earlier patch of the same name which had some
    issues detailed below and did not get accepted.  Refer
    https://lkml.org/lkml/2007/12/22/130.
    
    a) The preallocated space was not persistent when the
       FALLOC_FL_KEEP_SIZE flag was set.  It will deallocate cluster at evict
       time.
    
    b) There was no need to zero out the clusters when the flag was set
       Instead of doing an expanding truncate, just allocate clusters and add
       them to the fat chain.  This reduces preallocation time.
    
    Compatibility with windows:
    
    There are no issues when FALLOC_FL_KEEP_SIZE is not set because it just
    does an expanding truncate.  Thus reading from the preallocated area on
    windows returns null until data is written to it.
    
    When a file with preallocated area using the FALLOC_FL_KEEP_SIZE was
    written to on windows, the windows driver freed-up the preallocated
    clusters and allocated new clusters for the new data.  The freed up
    clusters gets reflected in the free space available for the partition
    which can be seen from the Volume properties.
    
    The windows chkdsk tool also does not report any errors on a disk
    containing files with preallocated space.
    
    And there is also no issue using linux fat fsck.  because discard
    preallocated clusters at repair time.
    Signed-off-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
    Signed-off-by: default avatarAmit Sahrawat <a.sahrawat@samsung.com>
    Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b13bb33e
file.c 13.1 KB