mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
Add interface for file hole punching.
This adds an interface to "punch holes" (deallocate space) in VFS files. The interface is identical to the Solaris VOP_SPACE interface. This interface is necessary for TRIM support on file vdevs. This is implemented using Linux fallocate(FALLOC_FL_PUNCH_HOLE), which was introduced in 2.6.38. For a brief time before 2.6.38 this was done using the truncate_range inode operation, which was quickly deprecated. This patch only supports FALLOC_FL_PUNCH_HOLE. This adds support for the truncate_range() inode operation to VOP_SPACE() for file hole punching. This API is deprecated and removed in 3.5, so it's only useful for old kernels. On tmpfs, the truncate_range() inode operation translates to shmem_truncate_range(). Unfortunately, this function expects the end offset to be inclusive and aligned to the end of a page. If it is not, the kernel will stop with a BUG_ON(). This patch fixes the issue by adapting to the constraints set forth by shmem_truncate_range(). Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #168
This commit is contained in:
committed by
Brian Behlendorf
parent
a6c6839a88
commit
bbdc6ae495
@@ -72,6 +72,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
|
||||
SPL_AC_4ARGS_VFS_RENAME
|
||||
SPL_AC_VFS_FSYNC
|
||||
SPL_AC_2ARGS_VFS_FSYNC
|
||||
SPL_AC_INODE_TRUNCATE_RANGE
|
||||
SPL_AC_FS_STRUCT_SPINLOCK
|
||||
SPL_AC_CRED_STRUCT
|
||||
SPL_AC_GROUPS_SEARCH
|
||||
@@ -1992,6 +1993,27 @@ AC_DEFUN([SPL_AC_2ARGS_VFS_FSYNC], [
|
||||
])
|
||||
])
|
||||
|
||||
dnl #
|
||||
dnl # 3.5 API change,
|
||||
dnl # inode_operations.truncate_range removed
|
||||
dnl # (deprecated in favor of FALLOC_FL_PUNCH_HOLE)
|
||||
dnl #
|
||||
AC_DEFUN([SPL_AC_INODE_TRUNCATE_RANGE], [
|
||||
AC_MSG_CHECKING([whether truncate_range() inode operation is available])
|
||||
SPL_LINUX_TRY_COMPILE([
|
||||
#include <linux/fs.h>
|
||||
],[
|
||||
struct inode_operations ops;
|
||||
ops.truncate_range = NULL;
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_INODE_TRUNCATE_RANGE, 1,
|
||||
[truncate_range() inode operation is available])
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
]))
|
||||
|
||||
dnl #
|
||||
dnl # 2.6.33 API change. Also backported in RHEL5 as of 2.6.18-190.el5.
|
||||
dnl # Earlier versions of rwsem_is_locked() were inline and had a race
|
||||
|
||||
Reference in New Issue
Block a user