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 64deb23..67412c6 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 4a38f36..b362f4b 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 273e205..5945bd1 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 73a22c4..64d07e0 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 5ce100d..0c99ae8 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 81f778a..7194160 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 644c0b2..08aaa40 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 e270f37..8ab6938 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 8162037..85d09af 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 578fdbb..204efe8 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 b89e9e8..09ed6de 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 70532fb..f6c5ded 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 6bacf99..f369599 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 c41cdf6..0adcead 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 4288ca6..0b00c6d 100755 (executable)
--- a/configure
+++ b/configure
        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
+
+
+       EXTRA_KCFLAGS="$tmp_flags"
+
+
        { $as_echo "$as_me:$LINENO: checking whether blk_fetch_request() is available" >&5
 $as_echo_n "checking whether blk_fetch_request() is available... " >&6; }
        tmp_flags="$EXTRA_KCFLAGS"
        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
+
+
+       EXTRA_KCFLAGS="$tmp_flags"
+
+
        { $as_echo "$as_me:$LINENO: checking whether blk_fetch_request() is available" >&5
 $as_echo_n "checking whether blk_fetch_request() is available... " >&6; }
        tmp_flags="$EXTRA_KCFLAGS"
index f574205..0725bbc 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 a9f8be2..1544385 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 2cb43ca..1473768 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 73f07f4..cbed8c0 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 8024d30..e161cb4 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 d7423a3..9f39727 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 d18e5dd..9c69b62 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 56a1baf..bd1b2bf 100644 (file)
@@ -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
index 06c2047..91fd34b 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 245995d..0dcd27b 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 10dcd83..03c32de 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 ee2f168..1f8de0f 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 43bdf0d..daaf306 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 d909fa6..d28c6ac 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 a0595ce..4a93578 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 533d962..e982a68 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 8390ce8..61b61a7 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 541f72b..2d1a8ad 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 974f489..63b0ef3 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 f84cd39..2d43d89 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 23c4b29..c6d61a5 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 043f0fe..ab1d851 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 dad5d85..f1f6cb8 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 d7ea24f..70eb6a3 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 3a0b3a1..a217ab6 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 b8663bd..efa77ad 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 e5c3537..1656d9d 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 edb36b0..5a37394 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 301fde5..8894eb5 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 3e3cb2d..6135529 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 1fb5e57..e101188 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 9ba47ca..84e9e2a 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 fc071e2..6c6b3b1 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 8e98be3..1552a21 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 12524ff..5d1fcd7 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 19888ea..9b13134 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 f8316f9..a3822d9 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 0264aa4..ed4e319 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 b5d5d25..637dfd7 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 73c3249..6afa78f 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 70545c4..ca09273 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 018d0a7..6b20a9f 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 671fb7b..fe559cd 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 c91735a..887f0f7 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