• Lukas Czerner's avatar
    loop: add discard support for loop devices · dfaa2ef6
    Lukas Czerner authored
    This commit adds discard support for loop devices. Discard is usually
    supported by SSD and thinly provisioned devices as a method for
    reclaiming unused space. This is no different than trying to reclaim
    back space which is not used by the file system on the image, but it
    still occupies space on the host file system.
    
    We can do the reclamation on file system which does support hole
    punching. So when discard request gets to the loop driver we can
    translate that to punch a hole to the underlying file, hence reclaim
    the free space.
    
    This is very useful for trimming down the size of the image to only what
    is really used by the file system on that image. Fstrim may be used for
    that purpose.
    
    It has been tested on ext4, xfs and btrfs with the image file systems
    ext4, ext3, xfs and btrfs. ext4, or ext6 image on ext4 file system has
    some problems but it seems that ext4 punch hole implementation is
    somewhat flawed and it is unrelated to this commit.
    
    Also this is a very good method of validating file systems punch hole
    implementation.
    
    Note that when encryption is used, discard support is disabled, because
    using it might leak some information useful for possible attacker.
    Signed-off-by: default avatarLukas Czerner <lczerner@redhat.com>
    Reviewed-by: default avatarJeff Moyer <jmoyer@redhat.com>
    Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
    dfaa2ef6
loop.c 44.6 KB