ee5fd0bb80
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
21 lines
509 B
Plaintext
21 lines
509 B
Plaintext
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)
|
|
])
|
|
])
|