diff options
author | Etienne Dechamps <[email protected]> | 2011-09-02 15:23:12 +0200 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-02-09 16:19:38 -0800 |
commit | 30930fba219642cb1dadf1c8ef60ff799e3dc424 (patch) | |
tree | 093f2c5c254768e859f8307d77d393e9668b5e1f /include/linux | |
parent | cb2d19010d8fbcf6c22585cd8763fad3ba7db724 (diff) |
Add support for DISCARD to ZVOLs.
DISCARD (REQ_DISCARD, BLKDISCARD) is useful for thin provisioning.
It allows ZVOL clients to discard (unmap, trim) block ranges from
a ZVOL, thus optimizing disk space usage by allowing a ZVOL to
shrink instead of just grow.
We can't use zfs_space() or zfs_freesp() here, since these functions
only work on regular files, not volumes. Fortunately we can use the
low-level function dmu_free_long_range() which does exactly what we
want.
Currently the discard operation is not added to the log. That's not
a big deal since losing discard requests cannot result in data
corruption. It would however result in disk space usage higher than
it should be. Thus adding log support to zvol_discard() is probably
a good idea for a future improvement.
Signed-off-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/Makefile.in | 1 | ||||
-rw-r--r-- | include/linux/blkdev_compat.h | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/Makefile.in b/include/linux/Makefile.in index d18e5dd9c..9c69b6257 100644 --- a/include/linux/Makefile.in +++ b/include/linux/Makefile.in @@ -51,6 +51,7 @@ am__aclocal_m4_deps = \ $(top_srcdir)/config/kernel-bio-rw-syncio.m4 \ $(top_srcdir)/config/kernel-blk-end-request.m4 \ $(top_srcdir)/config/kernel-blk-fetch-request.m4 \ + $(top_srcdir)/config/kernel-blk-queue-discard.m4 \ $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ $(top_srcdir)/config/kernel-blk-queue-io-opt.m4 \ $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h index 56a1bafe9..bd1b2bf54 100644 --- a/include/linux/blkdev_compat.h +++ b/include/linux/blkdev_compat.h @@ -425,6 +425,14 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags) #endif /* + * 2.6.32 API change + * Use the normal I/O patch for discards. + */ +#ifdef REQ_DISCARD +# define VDEV_REQ_DISCARD REQ_DISCARD +#endif + +/* * Default Linux IO Scheduler, * Setting the scheduler to noop will allow the Linux IO scheduler to * still perform front and back merging, while leaving the request |