diff --git a/acinclude.m4 b/acinclude.m4 index 3ff4551ebf..c5cf9495ee 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -917,6 +917,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_IOP_I_PERMISSION_TAKES_FLAGS LINUX_IOP_I_PERMISSION_TAKES_NAMEIDATA LINUX_IOP_I_PUT_LINK_TAKES_COOKIE + LINUX_DOP_D_DELETE_TAKES_CONST LINUX_DOP_D_REVALIDATE_TAKES_NAMEIDATA LINUX_FOP_F_FLUSH_TAKES_FL_OWNER_T LINUX_FOP_F_FSYNC_TAKES_DENTRY diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 696146bd68..35f69bdbc3 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -961,7 +961,11 @@ afs_dentry_iput(struct dentry *dp, struct inode *ip) } static int +#if defined(DOP_D_DELETE_TAKES_CONST) +afs_dentry_delete(const struct dentry *dp) +#else afs_dentry_delete(struct dentry *dp) +#endif { if (dp->d_inode && (VTOAFS(dp->d_inode)->f.states & CUnlinked)) return 1; /* bad inode? */ diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 2292f811f7..3d3aa8f4b4 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -604,3 +604,17 @@ AC_DEFUN([LINUX_D_COUNT_IS_INT], [ [define if dentry->d_count is an int], [-Werror]) ]) + + +AC_DEFUN([LINUX_DOP_D_DELETE_TAKES_CONST], [ + AC_CHECK_LINUX_BUILD([whether dentry.d_op->d_delete takes a const argument], + [ac_cv_linux_dop_d_delete_takes_const], + [#include + #include ], + [struct dentry_operations _d_ops; + int _d_del(const struct dentry *de) {return 0;}; + _d_ops.d_delete = _d_del;], + [DOP_D_DELETE_TAKES_CONST], + [define if dentry.d_op->d_delete takes a const argument], + [-Werror]) +])