]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Support the fallocate() file operation.
authorEtienne Dechamps <etienne.dechamps@ovh.net>
Fri, 2 Sep 2011 07:42:07 +0000 (09:42 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 10 Feb 2012 00:19:32 +0000 (16:19 -0800)
Currently only the (FALLOC_FL_PUNCH_HOLE) flag combination is
supported, since it's the only one that matches the behavior of
zfs_space(). This makes it pretty much useless in its current
form, but it's a start.

To support other flag combinations we would need to modify
zfs_space() to make it more flexible, or emulate the desired
functionality in zpl_fallocate().

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #334

61 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-fallocate.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/sys/Makefile.in
include/sys/fm/Makefile.in
include/sys/fm/fs/Makefile.in
include/sys/fs/Makefile.in
include/sys/zpl.h
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/zpl_file.c
module/zfs/zpl_inode.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 37b0db77130c726861b4bf1c7724d401b1f35d11..64deb2369ac61de60de34f1cdf047c7834a12ada 100644 (file)
@@ -86,6 +86,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index a0fdde92c4cb1e3ae89594217057c5cd7bf2b8c7..4a38f36fc4a4297e53ae53d214d524eb662b2931 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 350c67dd4c29f2414bf69bd222634ae592dec04b..273e20542983e9732dee16ad21b99a4e802d5881 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 94e3a63e63b3d11500c29bef5cfabe828acae75e..73a22c4ef4b08b54097ffd43e992a958b3cfcc90 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index fa0b8c76222aaac37c2734cd8a2e7588eb4439de..5ce100dd0e485e4bbb4d57c59c435aa36a84eee3 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index ccf9924bd3c759716a3035fb9710ecb416a203ac..81f778a5e4efddf4e0f47811b026692c2e8b7a64 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index eb3f28d0fdb7b1e1bd35ee2425bbf7b79ec12231..644c0b2a36528198ff8d8b081b3306c847c37caf 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index c9811af105e1cc4fcb99005f3cd883e03cd04803..e270f3744d1f9429a04cc33178de855e7f1ffd6e 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 60a97aa2acf6005e8da241f28fc2f1b9762b9430..81620379a6d5a6dd7fefa7158f2a102073268e85 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index e53c87c4f437e64e20f08c7ce41c246f9d46b691..578fdbbc6e185f7aefbe3c97faf83c54ab8ad8dc 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 20658364b4f9145c36bc16839117153818a54c00..b89e9e8e8b9b1e4e9193574e0a146cd7cd13c52a 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index e95f55cb49efae6e8bd8f6a5fd2ac0009082cd0d..70532fbef451c03af663849a884b2add1cb57930 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 39862677ff347932c6178a0960103b907615adaa..6bacf9944af2c1596ee2f95913081625e7935c84 100644 (file)
@@ -66,6 +66,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
diff --git a/config/kernel-fallocate.m4 b/config/kernel-fallocate.m4
new file mode 100644 (file)
index 0000000..d551276
--- /dev/null
@@ -0,0 +1,48 @@
+dnl #
+dnl # Linux 2.6.38 - 3.x API
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_FILE_FALLOCATE], [
+       AC_MSG_CHECKING([whether fops->fallocate() exists])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/fs.h>
+       ],[
+               long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+               struct file_operations fops __attribute__ ((unused)) = {
+                       .fallocate = fallocate,
+               };
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
+
+dnl #
+dnl # Linux 2.6.x - 2.6.37 API
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_INODE_FALLOCATE], [
+       AC_MSG_CHECKING([whether iops->fallocate() exists])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/fs.h>
+       ],[
+               long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
+               struct inode_operations fops __attribute__ ((unused)) = {
+                       .fallocate = fallocate,
+               };
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
+
+dnl #
+dnl # The fallocate callback was moved from the inode_operations
+dnl # structure to the file_operations structure.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_FALLOCATE], [
+       ZFS_AC_KERNEL_FILE_FALLOCATE
+       ZFS_AC_KERNEL_INODE_FALLOCATE
+])
index b4645570099d40bdb146586a3c4864797e35ec38..c41cdf694b8b655ac4b42cd937c4ead4c01486db 100644 (file)
@@ -43,6 +43,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_EVICT_INODE
        ZFS_AC_KERNEL_NR_CACHED_OBJECTS
        ZFS_AC_KERNEL_FREE_CACHED_OBJECTS
+       ZFS_AC_KERNEL_FALLOCATE
        ZFS_AC_KERNEL_INSERT_INODE_LOCKED
        ZFS_AC_KERNEL_D_OBTAIN_ALIAS
        ZFS_AC_KERNEL_CHECK_DISK_SIZE_CHANGE
index 40ab1d2931952d7ae278cd9533e21de48bb3d2c5..4288ca658f2678b96c4443f6cd256dac9d5db6a0 100755 (executable)
--- a/configure
+++ b/configure
 
 
 
+
+       { $as_echo "$as_me:$LINENO: checking whether fops->fallocate() exists" >&5
+$as_echo_n "checking whether fops->fallocate() exists... " >&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/fs.h>
+
+int
+main (void)
+{
+
+               long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+               struct file_operations fops __attribute__ ((unused)) = {
+                       .fallocate = fallocate,
+               };
+
+  ;
+  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_FILE_FALLOCATE 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 iops->fallocate() exists" >&5
+$as_echo_n "checking whether iops->fallocate() exists... " >&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/fs.h>
+
+int
+main (void)
+{
+
+               long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
+               struct inode_operations fops __attribute__ ((unused)) = {
+                       .fallocate = fallocate,
+               };
+
+  ;
+  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_INODE_FALLOCATE 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 symbol insert_inode_locked is exported" >&5
 $as_echo_n "checking whether symbol insert_inode_locked is exported... " >&6; }
        grep -q -E '[[:space:]]insert_inode_locked[[:space:]]' \
 
 
 
+
+       { $as_echo "$as_me:$LINENO: checking whether fops->fallocate() exists" >&5
+$as_echo_n "checking whether fops->fallocate() exists... " >&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/fs.h>
+
+int
+main (void)
+{
+
+               long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL;
+               struct file_operations fops __attribute__ ((unused)) = {
+                       .fallocate = fallocate,
+               };
+
+  ;
+  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_FILE_FALLOCATE 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 iops->fallocate() exists" >&5
+$as_echo_n "checking whether iops->fallocate() exists... " >&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/fs.h>
+
+int
+main (void)
+{
+
+               long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
+               struct inode_operations fops __attribute__ ((unused)) = {
+                       .fallocate = fallocate,
+               };
+
+  ;
+  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_INODE_FALLOCATE 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 symbol insert_inode_locked is exported" >&5
 $as_echo_n "checking whether symbol insert_inode_locked is exported... " >&6; }
        grep -q -E '[[:space:]]insert_inode_locked[[:space:]]' \
index b7c3be689e4cf2113f19693160a07b71c47f42bc..f574205dd95c3d036a10582afb70b354d1822786 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index d92a983f8fb014caa234390f18f03756b5075ac5..a9f8be2053dd691deeca5a134bf03b35068c1189 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index b5e53a43775b98d8c2449efd536e020bd66ce70c..2cb43ca3c9f87c8367e23fa2181270b9c51261a6 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 0106a50684db56915fb862c22aa4108fcde580f7..73f07f4b6e540113ffb0f6845208ea2e74b9eab6 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index e0bc342969cd7f79a399756e494d1a838471caf5..8024d3095c384184f1f02c9e4cac22b16318b1cf 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index d4bb07ce6ea7a934053ddf84d68aa1ae0515c887..d7423a3c77740854cd86a980b575c633d1b971c8 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index e88c69215c747725d6a18dabdd6b6de4fe175a20..d18e5dd9c6920e5017f3049f170db86ba73d7d4a 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 3903cefdc57ee9cd6f39117d5930c06c59a7d297..06c20479b8e144479ffdc5f6060772d3d10235e1 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 46255c8e662204dd7c83a15452a6b977a2eca1e7..245995ddaac57a9dc23e6b71c99d22d1e32f74cc 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 5dd6f48820fdfc61caf7dc7a4afbf1437da85874..10dcd83e9144bed7830335be1f5977a9539c5dbd 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 550b106bb810e8d61bbde546eef7054864af6215..ee2f168216e6cb06381fefdda932cc2f44478cf7 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 2195ec9a3d98f4d9addd48f160b078341b7fa7c5..cfc86794e78a818b65611f299e672cbedb7abdd3 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/xattr_compat.h>
 #include <linux/exportfs.h>
 #include <linux/writeback.h>
+#include <linux/falloc.h>
 
 /* zpl_inode.c */
 extern const struct inode_operations zpl_inode_operations;
@@ -42,6 +43,8 @@ extern ssize_t zpl_read_common(struct inode *ip, const char *buf,
     size_t len, loff_t pos, uio_seg_t segment, int flags, cred_t *cr);
 extern ssize_t zpl_write_common(struct inode *ip, const char *buf,
     size_t len, loff_t pos, uio_seg_t segment, int flags, cred_t *cr);
+extern long zpl_fallocate_common(struct inode *ip, int mode,
+    loff_t offset, loff_t len);
 
 extern const struct address_space_operations zpl_address_space_operations;
 extern const struct file_operations zpl_file_operations;
index f68acbe71633ae78cbced47c9840918cee7c6ca4..43bdf0dc226a2dce1d78d69004b7d295bc0d4144 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index c87bbb323c5a8ffa46149cf4b88435a7769ea162..d909fa66aa6d9bb4492ac3d4742ad5ca694acf8f 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 3fcb93de88588858d00c7006f43f515d20e0ae37..a0595ce5dac620d42bfc99b38d803df643202ca5 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index cbfff617ab369f9eb5094ddf01bd1e2821a3b14b..533d962356c1bb55328f455102a04491115deecc 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 8951784ad2569ac8277577c9186ed59620d305fd..8390ce835dbb4076adc30f1d3b99e7443fa8d320 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index b77af2300f436aa7c24a5e50966b11ed65d377da..541f72b9d17530a01ab374c465dccce6d888750f 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 7fb66ef7c081049c44f6e40a435ef595c59af95e..974f489adb825f3877bbda5612345b6de45a9b60 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index bf418b90ef863960d5905526789fa32ec2493139..f84cd39d976bec3746dcba8a09b3680639f0003b 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 2d6f7464478674140086272bb5ed3b738fc09e94..23c4b2917f7160f839f6c8c76c991bb22c6c6b1e 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 9c693d43f2737943d6d37eb92c273fa956bbeaea..043f0fe1e48eb9009590177fb3163acc66f566bf 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 789214e5f5695c18de857a7ef0d5d62a147eab27..dad5d85613393eea2e06181d1a095bc7655126ff 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 058f143a52465b9cff823995fcf89f8ff0a4adac..d7ea24fff9e326aef17a1dd13422c059d4f16064 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 840100f75e7c68d0a5d54a2834ade264ad1c1493..3a0b3a1aff51506ec368c7740213348cd29c3536 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 81d011e1a7eb1c21a2b40451ab8feb0f74e8d294..b8663bdd2ef6913d4811e376965965b6fb56a230 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 1107586e40f2a48439d473668177a7253c9b41f2..e5c353795518eb4df0a616fdb7c974e91c6c6b41 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 065f9dc0e5a183066d9570f5666364aa449cf0bb..edb36b0710354251a130d7270a3e520c72618dbd 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 62db1c83f999ae06f81eed4c6062bbb7d60a652c..301fde58799d314a099af3611c865cba60e98836 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index ae6626bae2568787178716a7b9a7baf194e3246a..3e3cb2df10572e6d5877fb238e006acabbcf7eb0 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 6870365be3e3800818676732dfb2220764761256..1fb5e573dbebf1a9a3e83bf96396186d400bc7b5 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index c62a360dfd64abc427dc2021ebc6d13bb1e4a598..9ba47ca73aca84a5564313777a3f17fcf95e7dc5 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 39ec3931184961eb2daf8bf02f550f00bb6dca02..fc071e22a89ea777f6ccc57c4e7afb02ea26d06c 100644 (file)
@@ -65,6 +65,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index f428397b86d57b7ed6946d526cf057d1c0f9d0c9..8e98be3d16ad4a5bd5745a7b5a9b88d14ff79faf 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 4a12e10966e231510fb459db202b951017f71593..12524ffcce65e2b2c4f369bfa326814854f58f1c 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 0ef2c1558f0b38dc9c010dddf217e75f03aeabc3..5ac41c9d24e9747a649e7e28e1a8bb5fb731e577 100644 (file)
@@ -394,6 +394,50 @@ zpl_writepage(struct page *pp, struct writeback_control *wbc)
        return zpl_putpage(pp, wbc, pp->mapping);
 }
 
+/*
+ * The only flag combination which matches the behavior of zfs_space()
+ * is FALLOC_FL_PUNCH_HOLE.  This flag was introduced in the 2.6.38 kernel.
+ */
+long
+zpl_fallocate_common(struct inode *ip, int mode, loff_t offset, loff_t len)
+{
+       cred_t *cr = CRED();
+       int error = -EOPNOTSUPP;
+
+       if (mode & FALLOC_FL_KEEP_SIZE)
+               return (-EOPNOTSUPP);
+
+       crhold(cr);
+
+#ifdef FALLOC_FL_PUNCH_HOLE
+       if (mode & FALLOC_FL_PUNCH_HOLE) {
+               flock64_t bf;
+
+               bf.l_type = F_WRLCK;
+               bf.l_whence = 0;
+               bf.l_start = offset;
+               bf.l_len = len;
+               bf.l_pid = 0;
+
+               error = -zfs_space(ip, F_FREESP, &bf, FWRITE, offset, cr);
+       }
+#endif /* FALLOC_FL_PUNCH_HOLE */
+
+       crfree(cr);
+
+       ASSERT3S(error, <=, 0);
+       return (error);
+}
+
+#ifdef HAVE_FILE_FALLOCATE
+static long
+zpl_fallocate(struct file *filp, int mode, loff_t offset, loff_t len)
+{
+       return zpl_fallocate_common(filp->f_path.dentry->d_inode,
+           mode, offset, len);
+}
+#endif /* HAVE_FILE_FALLOCATE */
+
 const struct address_space_operations zpl_address_space_operations = {
        .readpages      = zpl_readpages,
        .readpage       = zpl_readpage,
@@ -410,6 +454,9 @@ const struct file_operations zpl_file_operations = {
        .readdir        = zpl_readdir,
        .mmap           = zpl_mmap,
        .fsync          = zpl_fsync,
+#ifdef HAVE_FILE_FALLOCATE
+       .fallocate      = zpl_fallocate,
+#endif /* HAVE_FILE_FALLOCATE */
 };
 
 const struct file_operations zpl_dir_file_operations = {
index 2d197a4880722a197a6cb1bb9c208982b37cc4e4..9b5533755985845b5d6cbf3f7c5204ee2965111a 100644 (file)
@@ -342,6 +342,15 @@ zpl_truncate_range(struct inode* ip, loff_t start, loff_t end)
        crfree(cr);
 }
 
+#ifdef HAVE_INODE_FALLOCATE
+static long
+zpl_fallocate(struct inode *ip, int mode, loff_t offset, loff_t len)
+{
+       return zpl_fallocate_common(ip, mode, offset, len);
+}
+#endif /* HAVE_INODE_FALLOCATE */
+
+
 const struct inode_operations zpl_inode_operations = {
        .create         = zpl_create,
        .link           = zpl_link,
@@ -358,6 +367,9 @@ const struct inode_operations zpl_inode_operations = {
        .removexattr    = generic_removexattr,
        .listxattr      = zpl_xattr_list,
        .truncate_range = zpl_truncate_range,
+#ifdef HAVE_INODE_FALLOCATE
+       .fallocate      = zpl_fallocate,
+#endif /* HAVE_INODE_FALLOCATE */
 };
 
 const struct inode_operations zpl_dir_inode_operations = {
index f09668560daec866bbee9f87221294cc3124f1cf..f8316f960f423f014d95f26cd65e8926326ed509 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index e50a0a4aff0eabd7127aa84401a882cf5679f485..0264aa45d3bb113328a1df7912cfa33ce00514a7 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 46e7e086021f2d95fb200fefa43f0897ea345c98..b5d5d25697cccf382d55e34b51dc968b9452da18 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 33ceab9a1d600983ca605288308bc04bec4c5575..73c32494d352326c42cfb349f53acb6122ca81ae 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 6e45dbbc396cee81c47ee1cb37210460e8fd5a66..70545c4c7fcf4ba18db911732c70588b7ff5f942 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 7fbdbc105813a4f823d085fa3e87e031d53558db..018d0a72e203cc56f7547f7655386a3f270e5b1f 100644 (file)
@@ -63,6 +63,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index 2712b6e25d3c27cd7c883b17faa37cc8596a0ad4..671fb7b759cf947ddd3242cdae3800f3cfe7369c 100644 (file)
@@ -64,6 +64,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/kernel-check-disk-size-change.m4 \
        $(top_srcdir)/config/kernel-d-obtain-alias.m4 \
        $(top_srcdir)/config/kernel-evict-inode.m4 \
+       $(top_srcdir)/config/kernel-fallocate.m4 \
        $(top_srcdir)/config/kernel-fmode-t.m4 \
        $(top_srcdir)/config/kernel-fsync.m4 \
        $(top_srcdir)/config/kernel-get-disk-ro.m4 \
index b90643f4652a8fe67dd036c405d63541e0ad79d0..c91735a8e9313b4c3c4230a566dd9e3c9269d39f 100644 (file)
 /* sops->evict_inode() exists */
 #undef HAVE_EVICT_INODE
 
+/* fops->fallocate() exists */
+#undef HAVE_FILE_FALLOCATE
+
 /* kernel defines fmode_t */
 #undef HAVE_FMODE_T
 
 /* Define to 1 if licensed under the GPL */
 #undef HAVE_GPL_ONLY_SYMBOLS
 
+/* fops->fallocate() exists */
+#undef HAVE_INODE_FALLOCATE
+
 /* insert_inode_locked() is available */
 #undef HAVE_INSERT_INODE_LOCKED