From: Marc Dionne Date: Fri, 28 May 2010 21:48:12 +0000 (-0400) Subject: Linux: 2.6.35 - fsync no longer takes a dentry X-Git-Tag: openafs-stable-1_4_13~6 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=4fcda9a268b58c784673fd3f250f888bd6ddb35f;p=packages%2Fo%2Fopenafs.git Linux: 2.6.35 - fsync no longer takes a dentry 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 Reviewed-by: Simon Wilkinson Tested-by: Derrick Brashear (cherry-picked from commit 4d89ce0a89e9b9e2709e6f6d730f245b5bce744b) Reviewed-on: http://gerrit.openafs.org/2549 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 58bffd741cdc917f164f19b4621aa2567e6a5b3e) Change-Id: Ibeb609a57003fc863568e4fc619db9746aa9462f Reviewed-on: http://gerrit.openafs.org/3520 Reviewed-by: Simon Wilkinson --- diff --git a/acinclude.m4 b/acinclude.m4 index d31d1c26e..60c47d194 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -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 diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 55190d7e3..17ca9179b 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -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 diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 6d14b2f87..5eabaa90b 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -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 ], +[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], [