Fix config issues: frame size and headers

1. With various (debug and/or tracing?) kernel options enabled it's
possible for 'struct inode' and 'struct super_block' to exceed the
default frame size, leaving errors like this in config.log:

build/conftest.c:116:1: error: the frame size of 1048 bytes is larger
than 1024 bytes [-Werror=frame-larger-than=]

Fix this by removing the frame size warning for config checks

2. Without the correct headers included, it's possible for declarations
to be missed, leaving errors like this in the config.log:

build/conftest.c:131:14: error: ‘struct nameidata’ declared inside
parameter list [-Werror]

Fix this by adding appropriate headers.

Note: Both these issues can result in silent config failures because
the compile failure is taken to mean "this option is not supported by
this kernel" rather than "there's something wrong with the config
test". This can lead to something merely annoying (compile failures) to
something potentially serious (miscompiled or misused kernel primitives
or functions). E.g. the fixes included here resulted in these
additional defines in zfs_config.h with linux v4.14.19:

Also, drive-by whitespace fixes in config/* files which don't mention
"GNU" (those ones look to be imported from elsewhere so leave them
alone).

Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Chris Dunlop <chris@onthe.net.au>
Closes #7169
This commit is contained in:
chrisrd 2018-02-16 07:58:23 +11:00 committed by Brian Behlendorf
parent 62d5c55313
commit e921f6508b
11 changed files with 15 additions and 11 deletions

View File

@ -2,16 +2,16 @@ deb-local:
@(if test "${HAVE_DPKGBUILD}" = "no"; then \ @(if test "${HAVE_DPKGBUILD}" = "no"; then \
echo -e "\n" \ echo -e "\n" \
"*** Required util ${DPKGBUILD} missing. Please install the\n" \ "*** Required util ${DPKGBUILD} missing. Please install the\n" \
"*** package for your distribution which provides ${DPKGBUILD},\n" \ "*** package for your distribution which provides ${DPKGBUILD},\n" \
"*** re-run configure, and try again.\n"; \ "*** re-run configure, and try again.\n"; \
exit 1; \ exit 1; \
fi; \ fi; \
if test "${HAVE_ALIEN}" = "no"; then \ if test "${HAVE_ALIEN}" = "no"; then \
echo -e "\n" \ echo -e "\n" \
"*** Required util ${ALIEN} missing. Please install the\n" \ "*** Required util ${ALIEN} missing. Please install the\n" \
"*** package for your distribution which provides ${ALIEN},\n" \ "*** package for your distribution which provides ${ALIEN},\n" \
"*** re-run configure, and try again.\n"; \ "*** re-run configure, and try again.\n"; \
exit 1; \ exit 1; \
fi) fi)
deb-kmod: deb-local rpm-kmod deb-kmod: deb-local rpm-kmod

View File

@ -184,6 +184,7 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_PERMISSION_WITH_NAMEIDATA], [
AC_MSG_CHECKING([whether iops->permission() wants nameidata]) AC_MSG_CHECKING([whether iops->permission() wants nameidata])
ZFS_LINUX_TRY_COMPILE([ ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/sched.h>
int permission_fn(struct inode *inode, int mask, int permission_fn(struct inode *inode, int mask,
struct nameidata *nd) { return 0; } struct nameidata *nd) { return 0; }

View File

@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_CREATE_NAMEIDATA], [
AC_MSG_CHECKING([whether iops->create() passes nameidata]) AC_MSG_CHECKING([whether iops->create() passes nameidata])
ZFS_LINUX_TRY_COMPILE([ ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/sched.h>
#ifdef HAVE_MKDIR_UMODE_T #ifdef HAVE_MKDIR_UMODE_T
int inode_create(struct inode *inode ,struct dentry *dentry, int inode_create(struct inode *inode ,struct dentry *dentry,

View File

@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_D_REVALIDATE_NAMEIDATA], [
AC_MSG_CHECKING([whether dops->d_revalidate() takes struct nameidata]) AC_MSG_CHECKING([whether dops->d_revalidate() takes struct nameidata])
ZFS_LINUX_TRY_COMPILE([ ZFS_LINUX_TRY_COMPILE([
#include <linux/dcache.h> #include <linux/dcache.h>
#include <linux/sched.h>
int revalidate (struct dentry *dentry, int revalidate (struct dentry *dentry,
struct nameidata *nidata) { return 0; } struct nameidata *nidata) { return 0; }

View File

@ -41,7 +41,7 @@ AC_DEFUN([ZFS_AC_KERNEL_FOLLOW_LINK], [
AC_DEFINE(HAVE_FOLLOW_LINK_NAMEIDATA, 1, AC_DEFINE(HAVE_FOLLOW_LINK_NAMEIDATA, 1,
[iops->follow_link() nameidata]) [iops->follow_link() nameidata])
],[ ],[
AC_MSG_ERROR(no; please file a bug report) AC_MSG_ERROR(no; please file a bug report)
]) ])
]) ])
]) ])

View File

@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_LOOKUP_NAMEIDATA], [
AC_MSG_CHECKING([whether iops->lookup() passes nameidata]) AC_MSG_CHECKING([whether iops->lookup() passes nameidata])
ZFS_LINUX_TRY_COMPILE([ ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/sched.h>
struct dentry *inode_lookup(struct inode *inode, struct dentry *inode_lookup(struct inode *inode,
struct dentry *dentry, struct nameidata *nidata) struct dentry *dentry, struct nameidata *nidata)

View File

@ -7,7 +7,7 @@ AC_DEFUN([ZFS_AC_KERNEL_VM_NODE_STAT], [
ZFS_LINUX_TRY_COMPILE([ ZFS_LINUX_TRY_COMPILE([
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/vmstat.h> #include <linux/vmstat.h>
],[ ],[
int a __attribute__ ((unused)) = NR_VM_NODE_STAT_ITEMS; int a __attribute__ ((unused)) = NR_VM_NODE_STAT_ITEMS;
long x __attribute__ ((unused)) = long x __attribute__ ((unused)) =
atomic_long_read(&vm_node_stat[0]); atomic_long_read(&vm_node_stat[0]);

View File

@ -711,7 +711,7 @@ AC_DEFUN([ZFS_LINUX_COMPILE_IFELSE], [
modpost_flag='' modpost_flag=''
test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
AS_IF( AS_IF(
[AC_TRY_COMMAND(cp conftest.c conftest.h build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])], [AC_TRY_COMMAND(cp conftest.c conftest.h build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $FRAME_LARGER_THAN $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])],
[$4], [$4],
[_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])] [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])]
) )

View File

@ -2,9 +2,9 @@ tgz-local:
@(if test "${HAVE_ALIEN}" = "no"; then \ @(if test "${HAVE_ALIEN}" = "no"; then \
echo -e "\n" \ echo -e "\n" \
"*** Required util ${ALIEN} missing. Please install the\n" \ "*** Required util ${ALIEN} missing. Please install the\n" \
"*** package for your distribution which provides ${ALIEN},\n" \ "*** package for your distribution which provides ${ALIEN},\n" \
"*** re-run configure, and try again.\n"; \ "*** re-run configure, and try again.\n"; \
exit 1; \ exit 1; \
fi) fi)
tgz-kmod: tgz-local rpm-kmod tgz-kmod: tgz-local rpm-kmod

View File

@ -6,7 +6,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [
LIBBLKID= LIBBLKID=
AC_CHECK_HEADER([blkid/blkid.h], [], [AC_MSG_FAILURE([ AC_CHECK_HEADER([blkid/blkid.h], [], [AC_MSG_FAILURE([
*** blkid.h missing, libblkid-devel package required])]) *** blkid.h missing, libblkid-devel package required])])
AC_SUBST([LIBBLKID], ["-lblkid"]) AC_SUBST([LIBBLKID], ["-lblkid"])
AC_DEFINE([HAVE_LIBBLKID], 1, [Define if you have libblkid]) AC_DEFINE([HAVE_LIBBLKID], 1, [Define if you have libblkid])

View File

@ -5,7 +5,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBSSL], [
LIBSSL= LIBSSL=
AC_CHECK_HEADER([openssl/evp.h], [], [AC_MSG_FAILURE([ AC_CHECK_HEADER([openssl/evp.h], [], [AC_MSG_FAILURE([
*** evp.h missing, libssl-devel package required])]) *** evp.h missing, libssl-devel package required])])
AC_SUBST([LIBSSL], ["-lssl -lcrypto"]) AC_SUBST([LIBSSL], ["-lssl -lcrypto"])
AC_DEFINE([HAVE_LIBSSL], 1, [Define if you have libssl]) AC_DEFINE([HAVE_LIBSSL], 1, [Define if you have libssl])