Linux: 2.6.35 - fsync no longer takes a dentry
authorMarc Dionne <marc.c.dionne@gmail.com>
Fri, 28 May 2010 21:48:12 +0000 (17:48 -0400)
committerDerrick Brashear <shadow@dementia.org>
Wed, 15 Dec 2010 09:44:13 +0000 (01:44 -0800)
In 2.6.35, the fsync file operations drops the dentry argument.
Add a configure test and cope.

Reviewed-on: http://gerrit.openafs.org/2064
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk>
Tested-by: Derrick Brashear <shadow@dementia.org>

(cherry-picked from commit 4d89ce0a89e9b9e2709e6f6d730f245b5bce744b)

Reviewed-on: http://gerrit.openafs.org/2549
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit 58bffd741cdc917f164f19b4621aa2567e6a5b3e)
Change-Id: Ibeb609a57003fc863568e4fc619db9746aa9462f
Reviewed-on: http://gerrit.openafs.org/3520
Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk>

acinclude.m4
src/afs/LINUX/osi_vnodeops.c
src/cf/linux-test4.m4

index d31d1c2..60c47d1 100644 (file)
@@ -772,6 +772,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
                 LINUX_IOP_I_PUT_LINK_TAKES_COOKIE
                 LINUX_DOP_D_REVALIDATE_TAKES_NAMEIDATA
                 LINUX_FOP_F_FLUSH_TAKES_FL_OWNER_T
+                LINUX_FOP_F_FSYNC_TAKES_DENTRY
                 LINUX_AOP_WRITEBACK_CONTROL
                 LINUX_FS_STRUCT_FOP_HAS_FLOCK
                 LINUX_FS_STRUCT_FOP_HAS_SENDFILE
index 55190d7..17ca917 100644 (file)
@@ -447,8 +447,10 @@ afs_linux_release(struct inode *ip, struct file *fp)
 }
 
 static int
-#if defined(AFS_LINUX24_ENV)
+#if defined(AFS_LINUX24_ENV) && defined(FOP_FSYNC_TAKES_DENTRY)
 afs_linux_fsync(struct file *fp, struct dentry *dp, int datasync)
+#elif defined(AFS_LINUX24_ENV)
+afs_linux_fsync(struct file *fp, int datasync)
 #else
 afs_linux_fsync(struct file *fp, struct dentry *dp)
 #endif
index 6d14b2f..5eabaa9 100644 (file)
@@ -942,6 +942,23 @@ fl_owner_t id;
       ac_cv_linux_func_f_flush_takes_fl_owner_t=no)])
   AC_MSG_RESULT($ac_cv_linux_func_f_flush_takes_fl_owner_t)])
 
+AC_DEFUN([LINUX_FOP_F_FSYNC_TAKES_DENTRY], [
+  AC_MSG_CHECKING([whether file_operations.fsync takes a dentry argument])
+  AC_CACHE_VAL([ac_cv_linux_func_f_fsync_takes_dentry], [
+    AC_TRY_KBUILD(
+[#include <linux/fs.h>],
+[struct inode _inode;
+struct file _file;
+struct dentry _d;
+(void)_inode.i_fop->fsync(&_file, &_d, 0);],
+      ac_cv_linux_func_f_fsync_takes_dentry=yes,
+      ac_cv_linux_func_f_fsync_takes_dentry=no)])
+  AC_MSG_RESULT($ac_cv_linux_func_f_fsync_takes_dentry)
+  if test "x$ac_cv_linux_func_f_fsync_takes_dentry" = "xyes"; then
+    AC_DEFINE([FOP_FSYNC_TAKES_DENTRY], 1, [define if your fops.fsync takes an dentry argument])
+  fi
+])
+
 AC_DEFUN([LINUX_HAVE_KMEM_CACHE_T], [
   AC_MSG_CHECKING([whether kmem_cache_t exists])
   AC_CACHE_VAL([ac_cv_linux_have_kmem_cache_t], [