Add -p switch to "zpool get"
[zfs.git] / config / kernel-fsync.m4
index 2733dba..e1f2d68 100644 (file)
@@ -1,20 +1,74 @@
 dnl #
-dnl # 2.6.35 API change
-dnl # The dentry argument was deamed unused and dropped in 2.6.36.
+dnl # Linux 2.6.x - 2.6.34 API
 dnl #
-AC_DEFUN([ZFS_AC_KERNEL_FSYNC_2ARGS], [
-       AC_MSG_CHECKING([whether fops->fsync() wants 2 args])
+AC_DEFUN([ZFS_AC_KERNEL_FSYNC_WITH_DENTRY], [
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/fs.h>
+
+               int test_fsync(struct file *f, struct dentry *dentry, int x)
+                   { return 0; }
+
+               static const struct file_operations
+                   fops __attribute__ ((unused)) = {
+                       .fsync = test_fsync,
+               };
+       ],[
+       ],[
+               AC_MSG_RESULT([dentry])
+               AC_DEFINE(HAVE_FSYNC_WITH_DENTRY, 1,
+                       [fops->fsync() with dentry])
        ],[
-               int (*fsync) (struct file *, int datasync) = NULL;
-               struct file_operations fops;
+       ])
+])
+
+dnl #
+dnl # Linux 2.6.35 - Linux 3.0 API
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_FSYNC_WITHOUT_DENTRY], [
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/fs.h>
 
-               fops.fsync = fsync;
+               int test_fsync(struct file *f, int x) { return 0; }
+
+               static const struct file_operations
+                   fops __attribute__ ((unused)) = {
+                       .fsync = test_fsync,
+               };
+       ],[
        ],[
-               AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_2ARGS_FSYNC, 1, [fops->fsync() want 2 args])
+               AC_MSG_RESULT([no dentry])
+               AC_DEFINE(HAVE_FSYNC_WITHOUT_DENTRY, 1,
+                       [fops->fsync() without dentry])
        ],[
-               AC_MSG_RESULT(no)
        ])
 ])
+
+dnl #
+dnl # Linux 3.1 - 3.x API
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_FSYNC_RANGE], [
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/fs.h>
+
+               int test_fsync(struct file *f, loff_t a, loff_t b, int c)
+                   { return 0; }
+
+               static const struct file_operations
+                   fops __attribute__ ((unused)) = {
+                       .fsync = test_fsync,
+               };
+       ],[
+       ],[
+               AC_MSG_RESULT([range])
+               AC_DEFINE(HAVE_FSYNC_RANGE, 1,
+                       [fops->fsync() with range])
+       ],[
+       ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_FSYNC], [
+       AC_MSG_CHECKING([whether fops->fsync() wants])
+       ZFS_AC_KERNEL_FSYNC_WITH_DENTRY
+       ZFS_AC_KERNEL_FSYNC_WITHOUT_DENTRY
+       ZFS_AC_KERNEL_FSYNC_RANGE
+])