Set zvol discard_granularity to the volblocksize.
authorEtienne Dechamps <etienne.dechamps@ovh.net>
Wed, 1 Aug 2012 08:29:59 +0000 (10:29 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 7 Aug 2012 21:55:31 +0000 (14:55 -0700)
Currently, zvols have a discard granularity set to 0, which suggests to
the upper layer that discard requests of arbirarily small size and
alignment can be made efficiently.

In practice however, ZFS does not handle unaligned discard requests
efficiently: indeed, it is unable to free a part of a block. It will
write zeros to the specified range instead, which is both useless and
inefficient (see dnode_free_range).

With this patch, zvol block devices expose volblocksize as their discard
granularity, so the upper layer is aware that it's not supposed to send
discard requests smaller than volblocksize.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #862

61 files changed:
Makefile.in
cmd/Makefile.in
cmd/mount_zfs/Makefile.in
cmd/vdev_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-discard-granularity.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/man5/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 52946a2..a8b6a09 100644 (file)
@@ -91,6 +91,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index bd03b35..3a031e8 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 0a6ca2e..b0e80aa 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 4a8ecfd..56b1ebe 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 6842334..e55f6ad 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 582604b..bdd2914 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 1a8a783..d229f81 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 6bfb81c..40db43c 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 9ac1d2e..74390c4 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 6781217..c4dc586 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index c6a2f0d..d13c2e6 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 2dbdfd4..b4cdc22 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index d16e5b7..acc2433 100644 (file)
@@ -71,6 +71,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
diff --git a/config/kernel-discard-granularity.m4 b/config/kernel-discard-granularity.m4
new file mode 100644 (file)
index 0000000..2c677c9
--- /dev/null
@@ -0,0 +1,20 @@
+dnl #
+dnl # 2.6.33 API change
+dnl # Discard granularity and alignment restrictions may now be set.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_DISCARD_GRANULARITY], [
+       AC_MSG_CHECKING([whether ql->discard_granularity is available])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/blkdev.h>
+       ],[
+               struct queue_limits ql __attribute__ ((unused));
+
+               ql.discard_granularity = 0;
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_DISCARD_GRANULARITY, 1,
+                         [ql->discard_granularity is available])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
index a40bb5b..260ad84 100644 (file)
@@ -39,6 +39,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_GET_GENDISK
        ZFS_AC_KERNEL_RQ_IS_SYNC
        ZFS_AC_KERNEL_RQ_FOR_EACH_SEGMENT
+       ZFS_AC_KERNEL_DISCARD_GRANULARITY
        ZFS_AC_KERNEL_CONST_XATTR_HANDLER
        ZFS_AC_KERNEL_XATTR_HANDLER_GET
        ZFS_AC_KERNEL_XATTR_HANDLER_SET
index 9b97fb4..313e051 100755 (executable)
--- a/configure
+++ b/configure
 
        EXTRA_KCFLAGS="$tmp_flags"
 
+
+       { $as_echo "$as_me:$LINENO: checking whether ql->discard_granularity is available" >&5
+$as_echo_n "checking whether ql->discard_granularity is available... " >&6; }
+
+
+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 queue_limits ql __attribute__ ((unused));
+
+               ql.discard_granularity = 0;
+
+  ;
+  return 0;
+}
+
+_ACEOF
+
+
+       rm -Rf build && mkdir -p build && touch build/conftest.mod.c
+       echo "obj-m := conftest.o" >build/Makefile
+       modpost_flag=''
+       test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
+       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 $modpost_flag'
+  { (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_DISCARD_GRANULARITY 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
+
+
+
        { $as_echo "$as_me:$LINENO: checking whether super_block uses const struct xattr_hander" >&5
 $as_echo_n "checking whether super_block uses const struct xattr_hander... " >&6; }
 
 
        EXTRA_KCFLAGS="$tmp_flags"
 
+
+       { $as_echo "$as_me:$LINENO: checking whether ql->discard_granularity is available" >&5
+$as_echo_n "checking whether ql->discard_granularity is available... " >&6; }
+
+
+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 queue_limits ql __attribute__ ((unused));
+
+               ql.discard_granularity = 0;
+
+  ;
+  return 0;
+}
+
+_ACEOF
+
+
+       rm -Rf build && mkdir -p build && touch build/conftest.mod.c
+       echo "obj-m := conftest.o" >build/Makefile
+       modpost_flag=''
+       test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
+       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 $modpost_flag'
+  { (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_DISCARD_GRANULARITY 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
+
+
+
        { $as_echo "$as_me:$LINENO: checking whether super_block uses const struct xattr_hander" >&5
 $as_echo_n "checking whether super_block uses const struct xattr_hander... " >&6; }
 
index 956e458..60fa585 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 0e98a6c..cda6b56 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 850bff2..44d418c 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 0ddd918..5597261 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index b9fbd17..fe4596f 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 4bacc97..da7c001 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index cdf0e1c..aa5651d 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index bd1b2bf..a5294ce 100644 (file)
@@ -433,6 +433,21 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags)
 #endif
 
 /*
+ * 2.6.33 API change
+ * Discard granularity and alignment restrictions may now be set.  For
+ * older kernels which do not support this it is safe to skip it.
+ */
+#ifdef HAVE_DISCARD_GRANULARITY
+static inline void
+blk_queue_discard_granularity(struct request_queue *q, unsigned int dg)
+{
+       q->limits.discard_granularity = dg;
+}
+#else
+#define blk_queue_discard_granularity(x, dg)   ((void)0)
+#endif /* HAVE_DISCARD_GRANULARITY */
+
+/*
  * 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 e6e880b..be2aec9 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 9d2aff6..9193af5 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index feac8f9..8d7829d 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index c1bff97..7529f06 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 87dfb2f..1ad9539 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 26dacbe..f5311c3 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index e9b8f95..7a60887 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 0f36765..2e0fcf9 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 811b051..081ce09 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 88ded3b..89fe88a 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index b8ba114..b7059c0 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 7cd6977..8e7e590 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 083fee5..3df767a 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 0c6fdcf..b81c3db 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 02186ac..23ffb4d 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index f9e0236..2b2c230 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index b601bc1..3752b74 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 8258f0f..fec69df 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 9ea3a27..3932adc 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 62b8761..7d784f3 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index cf37f16..e32a340 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 4ca9682..971a2bc 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index a90c890..64b2c30 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index c2c1d2e..f22b6f0 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index a94b7e1..b0c0015 100644 (file)
@@ -70,6 +70,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 1996ca2..9c33367 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index b0346cc..ad3c16f 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index c918944..5412e74 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 32e4f3c..07bda6d 100644 (file)
@@ -1245,6 +1245,7 @@ __zvol_create_minor(const char *name)
 #ifdef HAVE_BLK_QUEUE_DISCARD
        blk_queue_max_discard_sectors(zv->zv_queue,
            (zvol_max_discard_blocks * zv->zv_volblocksize) >> 9);
+       blk_queue_discard_granularity(zv->zv_queue, zv->zv_volblocksize);
        queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zv->zv_queue);
 #endif
 #ifdef HAVE_BLK_QUEUE_NONROT
index 3bc46fc..73c96fe 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index c51db42..2533fa1 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index c05e18b..cbcf1df 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 1704318..f1ec2f8 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 1f82746..81e036d 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 33b2c58..b961f0f 100644 (file)
@@ -68,6 +68,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index f0c78e0..846ca59 100644 (file)
@@ -69,6 +69,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-create-umode-t.m4 \
        $(top_srcdir)/config/kernel-d-make-root.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
+       $(top_srcdir)/config/kernel-discard-granularity.m4 \
        $(top_srcdir)/config/kernel-encode-fh-inode.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
        $(top_srcdir)/config/kernel-fallocate.m4 \
index 15f5a5c..260bd5a 100644 (file)
 /* xattr_handler->set() wants dentry */
 #undef HAVE_DENTRY_XATTR_SET
 
+/* ql->discard_granularity is available */
+#undef HAVE_DISCARD_GRANULARITY
+
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H