0a6b03d3b8
Gentoo Hardened kernels include the PaX/GRSecurity patches. They use a dialect of C that relies on a GCC plugin. In particular, struct file_operations has been marked do_const in the PaX/GRSecurity dialect, which causes GCC to consider all instances of it as const. This caused failures in the autotools checks and the ZFS source code. To address this, we modify the autotools checks to take into account differences between the PaX C dialect and the regular C dialect. We also modify struct zfs_acl's z_ops member to be a pointer to a function pointer table. Lastly, we modify zpl_put_link() to address a PaX change to the function prototype of nd_get_link(). This avoids compiler errors in the PaX/GRSecurity dialect. Note that the change in zpl_put_link() causes a warning that becomes a build failure when debugging is enabled. Fixing that warning requires ryao/spl@5ca50ef459. Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #484
70 lines
1.7 KiB
Plaintext
70 lines
1.7 KiB
Plaintext
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 # PaX Linux 2.6.38 - 3.x API
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_PAX_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_no_const fops __attribute__ ((unused)) = {
|
|
.fallocate = fallocate,
|
|
};
|
|
],[
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_FILE_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
|
|
ZFS_AC_PAX_KERNEL_FILE_FALLOCATE
|
|
])
|