loop: add discard support for loop devices
authorLukas Czerner <lczerner@redhat.com>
Fri, 19 Aug 2011 12:50:46 +0000 (14:50 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 19 Aug 2011 12:50:46 +0000 (14:50 +0200)
commitdfaa2ef68e80c378e610e3c8c536f1c239e8d3ef
tree1b827fb8b3785dfca6c5e19d7dbbb0a9d59a3d2c
parent548ef6cc26ca1c81f19855d57d3fb0f9a7ce3385
loop: add discard support for loop devices

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: Lukas Czerner <lczerner@redhat.com>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
drivers/block/loop.c