summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorEtienne Dechamps <[email protected]>2012-08-01 10:29:59 +0200
committerBrian Behlendorf <[email protected]>2012-08-07 14:55:31 -0700
commitee5fd0bb80d68ef095f831784cbb17181b2ba898 (patch)
treee2437a510eaa09db0af6429e1aa94d2d44b35182 /config
parent9a512dca97fec1afa5068b53621ce1dd7dbef578 (diff)
Set zvol discard_granularity to the volblocksize.
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 <[email protected]> Closes #862
Diffstat (limited to 'config')
-rw-r--r--config/kernel-discard-granularity.m420
-rw-r--r--config/kernel.m41
2 files changed, 21 insertions, 0 deletions
diff --git a/config/kernel-discard-granularity.m4 b/config/kernel-discard-granularity.m4
new file mode 100644
index 000000000..2c677c909
--- /dev/null
+++ b/config/kernel-discard-granularity.m4
@@ -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)
+ ])
+])
diff --git a/config/kernel.m4 b/config/kernel.m4
index a40bb5b6c..260ad84f4 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -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