]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Add support for DISCARD to ZVOLs.
authorEtienne Dechamps <etienne.dechamps@ovh.net>
Fri, 2 Sep 2011 13:23:12 +0000 (15:23 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 10 Feb 2012 00:19:38 +0000 (16:19 -0800)
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 <behlendorf1@llnl.gov>
60 files changed:
Makefile.in
cmd/Makefile.in
cmd/mount_zfs/Makefile.in
cmd/sas_switch_id/Makefile.in
cmd/zdb/Makefile.in
cmd/zfs/Makefile.in
cmd/zinject/Makefile.in
cmd/zpios/Makefile.in
cmd/zpool/Makefile.in
cmd/zpool_id/Makefile.in
cmd/zpool_layout/Makefile.in
cmd/ztest/Makefile.in
cmd/zvol_id/Makefile.in
config/kernel-blk-queue-discard.m4 [new file with mode: 0644]
config/kernel.m4
configure
dracut/90zfs/Makefile.in
dracut/Makefile.in
etc/Makefile.in
etc/init.d/Makefile.in
etc/zfs/Makefile.in
include/Makefile.in
include/linux/Makefile.in
include/linux/blkdev_compat.h
include/sys/Makefile.in
include/sys/fm/Makefile.in
include/sys/fm/fs/Makefile.in
include/sys/fs/Makefile.in
lib/Makefile.in
lib/libavl/Makefile.in
lib/libefi/Makefile.in
lib/libnvpair/Makefile.in
lib/libshare/Makefile.in
lib/libspl/Makefile.in
lib/libspl/asm-generic/Makefile.in
lib/libspl/asm-i386/Makefile.in
lib/libspl/asm-x86_64/Makefile.in
lib/libspl/include/Makefile.in
lib/libspl/include/ia32/Makefile.in
lib/libspl/include/ia32/sys/Makefile.in
lib/libspl/include/rpc/Makefile.in
lib/libspl/include/sys/Makefile.in
lib/libspl/include/sys/dktp/Makefile.in
lib/libspl/include/sys/sysevent/Makefile.in
lib/libspl/include/util/Makefile.in
lib/libunicode/Makefile.in
lib/libuutil/Makefile.in
lib/libzfs/Makefile.in
lib/libzpool/Makefile.in
man/Makefile.in
man/man8/Makefile.in
module/zfs/zvol.c
scripts/Makefile.in
scripts/zpios-profile/Makefile.in
scripts/zpios-test/Makefile.in
scripts/zpool-config/Makefile.in
scripts/zpool-layout/Makefile.in
udev/Makefile.in
udev/rules.d/Makefile.in
zfs_config.h.in

index 64deb2369ac61de60de34f1cdf047c7834a12ada..67412c63d2bcc2d05db89d7a0a605fb93cd6d921 100644 (file)
@@ -72,6 +72,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 \
index 4a38f36fc4a4297e53ae53d214d524eb662b2931..b362f4bc4561dbaebbd213f10064b3fd9b7d940f 100644 (file)
@@ -49,6 +49,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 \
index 273e20542983e9732dee16ad21b99a4e802d5881..5945bd1c1d272bd601b56354f49ee700a24711d5 100644 (file)
@@ -52,6 +52,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 \
index 73a22c4ef4b08b54097ffd43e992a958b3cfcc90..64d07e09badc80f7bc23f29822dff53139897f2c 100644 (file)
@@ -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 \
index 5ce100dd0e485e4bbb4d57c59c435aa36a84eee3..0c99ae803fc4a5cd1928024f6a0e559196d9636e 100644 (file)
@@ -52,6 +52,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 \
index 81f778a5e4efddf4e0f47811b026692c2e8b7a64..71941603dacc102abd1b54993880f3b8af03ffa8 100644 (file)
@@ -52,6 +52,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 \
index 644c0b2a36528198ff8d8b081b3306c847c37caf..08aaa40ed4e4bcdf60bb6b7a807dce509eb62b00 100644 (file)
@@ -52,6 +52,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 \
index e270f3744d1f9429a04cc33178de855e7f1ffd6e..8ab6938cc4d73fbbff038687a40690562c892c82 100644 (file)
@@ -52,6 +52,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 \
index 81620379a6d5a6dd7fefa7158f2a102073268e85..85d09af7143bc6e8e5afd742e5056baa0b3e215c 100644 (file)
@@ -52,6 +52,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 \
index 578fdbbc6e185f7aefbe3c97faf83c54ab8ad8dc..204efe831a1ab436b46567d169321c40b0fb5c4c 100644 (file)
@@ -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 \
index b89e9e8e8b9b1e4e9193574e0a146cd7cd13c52a..09ed6de1dcce0196eb196a1b7a9e22382a6bcb80 100644 (file)
@@ -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 \
index 70532fbef451c03af663849a884b2add1cb57930..f6c5deda7a2d3233c295bc9be7c3f225995c96ca 100644 (file)
@@ -52,6 +52,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 \
index 6bacf9944af2c1596ee2f95913081625e7935c84..f369599ee845c04c777a1083feed2b4cc686b570 100644 (file)
@@ -52,6 +52,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/config/kernel-blk-queue-discard.m4 b/config/kernel-blk-queue-discard.m4
new file mode 100644 (file)
index 0000000..3e5147a
--- /dev/null
@@ -0,0 +1,22 @@
+dnl #
+dnl # 2.6.32 API change
+dnl # Discard requests were moved to the normal I/O path.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISCARD], [
+       AC_MSG_CHECKING([whether blk_queue_discard() is available])
+       tmp_flags="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="-Wno-unused-but-set-variable"
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/blkdev.h>
+       ],[
+               struct request_queue *q = NULL;
+               (void) blk_queue_discard(q);
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_BLK_QUEUE_DISCARD, 1,
+                         [blk_queue_discard() is available])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+       EXTRA_KCFLAGS="$tmp_flags"
+])
index c41cdf694b8b655ac4b42cd937c4ead4c01486db..0adceadacb1fc5f0fde3f766ba3fc18df9e104ec 100644 (file)
@@ -27,6 +27,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_BLK_QUEUE_PHYSICAL_BLOCK_SIZE
        ZFS_AC_KERNEL_BLK_QUEUE_IO_OPT
        ZFS_AC_KERNEL_BLK_QUEUE_NONROT
+       ZFS_AC_KERNEL_BLK_QUEUE_DISCARD
        ZFS_AC_KERNEL_BLK_FETCH_REQUEST
        ZFS_AC_KERNEL_BLK_REQUEUE_REQUEST
        ZFS_AC_KERNEL_BLK_RQ_BYTES
index 4288ca658f2678b96c4443f6cd256dac9d5db6a0..0b00c6ddd93b040df5d2596316f5640986994fa8 100755 (executable)
--- a/configure
+++ b/configure
@@ -14151,6 +14151,75 @@ $as_echo "no" >&6; }
 
 
 
+fi
+
+       rm -Rf build
+
+
+       EXTRA_KCFLAGS="$tmp_flags"
+
+
+       { $as_echo "$as_me:$LINENO: checking whether blk_queue_discard() is available" >&5
+$as_echo_n "checking whether blk_queue_discard() is available... " >&6; }
+       tmp_flags="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="-Wno-unused-but-set-variable"
+
+
+cat confdefs.h - <<_ACEOF >conftest.c
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+               #include <linux/blkdev.h>
+
+int
+main (void)
+{
+
+               struct request_queue *q = NULL;
+               (void) blk_queue_discard(q);
+
+  ;
+  return 0;
+}
+
+_ACEOF
+
+
+       rm -Rf build && mkdir -p build
+       echo "obj-m := conftest.o" >build/Makefile
+       if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+               { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BLK_QUEUE_DISCARD 1
+_ACEOF
+
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+               { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+
+
 fi
 
        rm -Rf build
@@ -19969,6 +20038,75 @@ $as_echo "no" >&6; }
 
 
 
+fi
+
+       rm -Rf build
+
+
+       EXTRA_KCFLAGS="$tmp_flags"
+
+
+       { $as_echo "$as_me:$LINENO: checking whether blk_queue_discard() is available" >&5
+$as_echo_n "checking whether blk_queue_discard() is available... " >&6; }
+       tmp_flags="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="-Wno-unused-but-set-variable"
+
+
+cat confdefs.h - <<_ACEOF >conftest.c
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+               #include <linux/blkdev.h>
+
+int
+main (void)
+{
+
+               struct request_queue *q = NULL;
+               (void) blk_queue_discard(q);
+
+  ;
+  return 0;
+}
+
+_ACEOF
+
+
+       rm -Rf build && mkdir -p build
+       echo "obj-m := conftest.o" >build/Makefile
+       if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+               { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BLK_QUEUE_DISCARD 1
+_ACEOF
+
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+               { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+
+
 fi
 
        rm -Rf build
index f574205dd95c3d036a10582afb70b354d1822786..0725bbc74e3ac95e1abe2a3ce89dba25becfd5f3 100644 (file)
@@ -50,6 +50,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 \
index a9f8be2053dd691deeca5a134bf03b35068c1189..1544385b40cc2269332942e288a474b617776227 100644 (file)
@@ -49,6 +49,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 \
index 2cb43ca3c9f87c8367e23fa2181270b9c51261a6..14737685d0919bd29c0325b664fbe33c1318b0eb 100644 (file)
@@ -49,6 +49,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 \
index 73f07f4b6e540113ffb0f6845208ea2e74b9eab6..cbed8c0acff7fa13fcbe6ec438b1ee586e484bd5 100644 (file)
@@ -50,6 +50,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 \
index 8024d3095c384184f1f02c9e4cac22b16318b1cf..e161cb455193ae56e0d2ae4894b155e9c3cc21f5 100644 (file)
@@ -50,6 +50,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 \
index d7423a3c77740854cd86a980b575c633d1b971c8..9f3972782f9abe689e246e4d1791acc95384c5b3 100644 (file)
@@ -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 \
index d18e5dd9c6920e5017f3049f170db86ba73d7d4a..9c69b625711af1d445f2639c12dcb78261169125 100644 (file)
@@ -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 \
index 56a1bafe9fae9fe09320dde9c0885ac27e5dd2b2..bd1b2bf540031c0f1bdc9aad6da12ebd8b5344c2 100644 (file)
@@ -424,6 +424,14 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags)
 # define VDEV_REQ_FUA                  REQ_HARDBARRIER
 #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
index 06c20479b8e144479ffdc5f6060772d3d10235e1..91fd34b657addfa3f3c2b7cf850ae735b1134198 100644 (file)
@@ -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 \
index 245995ddaac57a9dc23e6b71c99d22d1e32f74cc..0dcd27b10b88e87b5e26982ac6836f06840dd90f 100644 (file)
@@ -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 \
index 10dcd83e9144bed7830335be1f5977a9539c5dbd..03c32de061686b4093d61669269c58e05002116a 100644 (file)
@@ -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 \
index ee2f168216e6cb06381fefdda932cc2f44478cf7..1f8de0f079ff4628ae552b942cb86293ef8dba6a 100644 (file)
@@ -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 \
index 43bdf0dc226a2dce1d78d69004b7d295bc0d4144..daaf306b1c3d603cb75b596c9f390c51f4c3adba 100644 (file)
@@ -49,6 +49,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 \
index d909fa66aa6d9bb4492ac3d4742ad5ca694acf8f..d28c6acde4fd13e2080ca0d0d5ce2f140d6c8ec3 100644 (file)
@@ -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 \
index a0595ce5dac620d42bfc99b38d803df643202ca5..4a935784a47007c593d584ec9d58dbb4a5a3cbea 100644 (file)
@@ -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 \
index 533d962356c1bb55328f455102a04491115deecc..e982a68bd85b20dabc85175f0a83714d2b900822 100644 (file)
@@ -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 \
index 8390ce835dbb4076adc30f1d3b99e7443fa8d320..61b61a700d5389a4f0d2554096aa5cc9b1ea88f1 100644 (file)
@@ -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 \
index 541f72b9d17530a01ab374c465dccce6d888750f..2d1a8ad170e8cb54e1ce86fa6ccdb53400e3176c 100644 (file)
@@ -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 \
index 974f489adb825f3877bbda5612345b6de45a9b60..63b0ef392eb54751e394ee9cf0114d2ba4fef314 100644 (file)
@@ -50,6 +50,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 \
index f84cd39d976bec3746dcba8a09b3680639f0003b..2d43d891884ac583a39bb99f725af8766ae9e222 100644 (file)
@@ -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 \
index 23c4b2917f7160f839f6c8c76c991bb22c6c6b1e..c6d61a5fa458cfa70f94c94c69048576d2333763 100644 (file)
@@ -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 \
index 043f0fe1e48eb9009590177fb3163acc66f566bf..ab1d8511ecbe99fd6c01950e968bd1ff37c175ca 100644 (file)
@@ -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 \
index dad5d85613393eea2e06181d1a095bc7655126ff..f1f6cb87fd9d8f1fa3202fe39592a6eeecb7b1f4 100644 (file)
@@ -49,6 +49,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 \
index d7ea24fff9e326aef17a1dd13422c059d4f16064..70eb6a35dfb66967461a3b04214c191e18da76fc 100644 (file)
@@ -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 \
index 3a0b3a1aff51506ec368c7740213348cd29c3536..a217ab6dc6e14a578223170de1409dac5a86d3f6 100644 (file)
@@ -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 \
index b8663bdd2ef6913d4811e376965965b6fb56a230..efa77adc6c373a04048420287ccb8ab1f9250831 100644 (file)
@@ -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 \
index e5c353795518eb4df0a616fdb7c974e91c6c6b41..1656d9d4ee82be9379d209914ebf82010b77d1de 100644 (file)
@@ -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 \
index edb36b0710354251a130d7270a3e520c72618dbd..5a37394e3ac12db11cb4a48fe03d9fe9609bb311 100644 (file)
@@ -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 \
index 301fde58799d314a099af3611c865cba60e98836..8894eb57a87c62b2dc830aa9f25e090849360149 100644 (file)
@@ -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 \
index 3e3cb2df10572e6d5877fb238e006acabbcf7eb0..6135529f8b8524fcccae638d98ba697bfa782402 100644 (file)
@@ -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 \
index 1fb5e573dbebf1a9a3e83bf96396186d400bc7b5..e10118898a93f14f0a0029afca81c659617a750c 100644 (file)
@@ -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 \
index 9ba47ca73aca84a5564313777a3f17fcf95e7dc5..84e9e2a7ed7ad364bf38cef1625dc6fbb9879c64 100644 (file)
@@ -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 \
index fc071e22a89ea777f6ccc57c4e7afb02ea26d06c..6c6b3b1e7a9163c7e6badac16da1b653749f9ef1 100644 (file)
@@ -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 \
index 8e98be3d16ad4a5bd5745a7b5a9b88d14ff79faf..1552a216a05383e2d90b30c751b84710c8dd2b62 100644 (file)
@@ -49,6 +49,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 \
index 12524ffcce65e2b2c4f369bfa326814854f58f1c..5d1fcd726fd5205ce9bd03d690ae1b7d504d7e77 100644 (file)
@@ -49,6 +49,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 \
index 19888ea96f6cee4fb922d716dc36a177539cd36d..9b13134024f8964b080dffd0d33862e2d433731e 100644 (file)
@@ -574,6 +574,42 @@ zvol_write(void *arg)
        blk_end_request(req, -error, size);
 }
 
+#ifdef HAVE_BLK_QUEUE_DISCARD
+static void
+zvol_discard(void *arg)
+{
+       struct request *req = (struct request *)arg;
+       struct request_queue *q = req->q;
+       zvol_state_t *zv = q->queuedata;
+       uint64_t offset = blk_rq_pos(req) << 9;
+       uint64_t size = blk_rq_bytes(req);
+       int error;
+       rl_t *rl;
+
+       if (offset + size > zv->zv_volsize) {
+               blk_end_request(req, -EIO, size);
+               return;
+       }
+
+       if (size == 0) {
+               blk_end_request(req, 0, size);
+               return;
+       }
+
+       rl = zfs_range_lock(&zv->zv_znode, offset, size, RL_WRITER);
+
+       error = dmu_free_long_range(zv->zv_objset, ZVOL_OBJ, offset, size);
+
+       /*
+        * TODO: maybe we should add the operation to the log.
+        */
+
+       zfs_range_unlock(rl);
+
+       blk_end_request(req, -error, size);
+}
+#endif /* HAVE_BLK_QUEUE_DISCARD */
+
 /*
  * Common read path running under the zvol taskq context.  This function
  * is responsible for copying the requested data out of the DMU and in to
@@ -674,6 +710,13 @@ zvol_request(struct request_queue *q)
                                break;
                        }
 
+#ifdef HAVE_BLK_QUEUE_DISCARD
+                       if (req->cmd_flags & VDEV_REQ_DISCARD) {
+                               zvol_dispatch(zvol_discard, req);
+                               break;
+                       }
+#endif /* HAVE_BLK_QUEUE_DISCARD */
+
                        zvol_dispatch(zvol_write, req);
                        break;
                default:
@@ -1193,6 +1236,10 @@ __zvol_create_minor(const char *name)
        blk_queue_max_segment_size(zv->zv_queue, UINT_MAX);
        blk_queue_physical_block_size(zv->zv_queue, zv->zv_volblocksize);
        blk_queue_io_opt(zv->zv_queue, zv->zv_volblocksize);
+#ifdef HAVE_BLK_QUEUE_DISCARD
+       blk_queue_max_discard_sectors(zv->zv_queue, UINT_MAX);
+       queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zv->zv_queue);
+#endif
 #ifdef HAVE_BLK_QUEUE_NONROT
        queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zv->zv_queue);
 #endif
index f8316f960f423f014d95f26cd65e8926326ed509..a3822d902a42127a1aa548d66ae467cd11e0f249 100644 (file)
@@ -50,6 +50,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 \
index 0264aa45d3bb113328a1df7912cfa33ce00514a7..ed4e3192c171aa4485dfcfdf74d399fa8934648a 100644 (file)
@@ -50,6 +50,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 \
index b5d5d25697cccf382d55e34b51dc968b9452da18..637dfd7fa2e79852e89e6d47f2fa80f40d1e000f 100644 (file)
@@ -50,6 +50,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 \
index 73c32494d352326c42cfb349f53acb6122ca81ae..6afa78fc0876f1fd1b7c6080fa32a9c51875187a 100644 (file)
@@ -50,6 +50,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 \
index 70545c4c7fcf4ba18db911732c70588b7ff5f942..ca09273826b0b1cfa74b5a896351f96154bc7b17 100644 (file)
@@ -50,6 +50,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 \
index 018d0a72e203cc56f7547f7655386a3f270e5b1f..6b20a9fc6cf57a857e20d61f9e52061d9b13d7f5 100644 (file)
@@ -49,6 +49,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 \
index 671fb7b759cf947ddd3242cdae3800f3cfe7369c..fe559cd73ec15690361acdaa1da238069726db87 100644 (file)
@@ -50,6 +50,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 \
index c91735a8e9313b4c3c4230a566dd9e3c9269d39f..887f0f7c9bf7827457fa15bc7dbc83e5cf144292 100644 (file)
@@ -51,6 +51,9 @@
 /* blk_fetch_request() is available */
 #undef HAVE_BLK_FETCH_REQUEST
 
+/* blk_queue_discard() is available */
+#undef HAVE_BLK_QUEUE_DISCARD
+
 /* blk_queue_flush() is available */
 #undef HAVE_BLK_QUEUE_FLUSH