Skip to content

Commit

Permalink
Fix config issues: frame size and headers
Browse files Browse the repository at this point in the history
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).

Signed-off-by: Chris Dunlop <chris@onthe.net.au>

diff --git a/config/kernel-acl.m4 b/config/kernel-acl.m4
index 3114843..02cc020 100644
--- a/config/kernel-acl.m4
+++ b/config/kernel-acl.m4
@@ -184,6 +184,7 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_PERMISSION_WITH_NAMEIDATA], [
 	AC_MSG_CHECKING([whether iops->permission() wants nameidata])
 	ZFS_LINUX_TRY_COMPILE([
 		#include <linux/fs.h>
+		#include <linux/sched.h>

 		int permission_fn(struct inode *inode, int mask,
 		    struct nameidata *nd) { return 0; }
diff --git a/config/kernel-create-nameidata.m4 b/config/kernel-create-nameidata.m4
index a71490a..d4c155c 100644
--- a/config/kernel-create-nameidata.m4
+++ b/config/kernel-create-nameidata.m4
@@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_CREATE_NAMEIDATA], [
 	AC_MSG_CHECKING([whether iops->create() passes nameidata])
 	ZFS_LINUX_TRY_COMPILE([
 		#include <linux/fs.h>
+		#include <linux/sched.h>

 		#ifdef HAVE_MKDIR_UMODE_T
 		int inode_create(struct inode *inode ,struct dentry *dentry,
diff --git a/config/kernel-current-time.m4 b/config/kernel-current-time.m4
index 2ede9ff..aec6a5b 100644
--- a/config/kernel-current-time.m4
+++ b/config/kernel-current-time.m4
@@ -5,8 +5,8 @@ AC_DEFUN([ZFS_AC_KERNEL_CURRENT_TIME],
 	[AC_MSG_CHECKING([whether current_time() exists])
 	ZFS_LINUX_TRY_COMPILE_SYMBOL([
 		#include <linux/fs.h>
-	], [
 		struct inode ip;
+	], [
 		struct timespec now __attribute__ ((unused));

 		now = current_time(&ip);
diff --git a/config/kernel-dentry-operations.m4 b/config/kernel-dentry-operations.m4
index 3182490..61f5a27 100644
--- a/config/kernel-dentry-operations.m4
+++ b/config/kernel-dentry-operations.m4
@@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_D_REVALIDATE_NAMEIDATA], [
 	AC_MSG_CHECKING([whether dops->d_revalidate() takes struct nameidata])
 	ZFS_LINUX_TRY_COMPILE([
 		#include <linux/dcache.h>
+		#include <linux/sched.h>

 		int revalidate (struct dentry *dentry,
 		    struct nameidata *nidata) { return 0; }
diff --git a/config/kernel-inode-set-flags.m4 b/config/kernel-inode-set-flags.m4
index e0ad267..287317b 100644
--- a/config/kernel-inode-set-flags.m4
+++ b/config/kernel-inode-set-flags.m4
@@ -6,8 +6,8 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_SET_FLAGS], [
 	AC_MSG_CHECKING([whether inode_set_flags() exists])
 	ZFS_LINUX_TRY_COMPILE([
 		#include <linux/fs.h>
-	],[
 		struct inode inode;
+	],[
 		inode_set_flags(&inode, S_IMMUTABLE, S_IMMUTABLE);
 	],[
 		AC_MSG_RESULT(yes)
diff --git a/config/kernel-lookup-nameidata.m4 b/config/kernel-lookup-nameidata.m4
index 43f5fb4..5453be5 100644
--- a/config/kernel-lookup-nameidata.m4
+++ b/config/kernel-lookup-nameidata.m4
@@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_LOOKUP_NAMEIDATA], [
 	AC_MSG_CHECKING([whether iops->lookup() passes nameidata])
 	ZFS_LINUX_TRY_COMPILE([
 		#include <linux/fs.h>
+		#include <linux/sched.h>

 		struct dentry *inode_lookup(struct inode *inode,
 		    struct dentry *dentry, struct nameidata *nidata)
diff --git a/config/kernel-set-nlink.m4 b/config/kernel-set-nlink.m4
index f7ffc0d..07a2ac8 100644
--- a/config/kernel-set-nlink.m4
+++ b/config/kernel-set-nlink.m4
@@ -6,8 +6,8 @@ AC_DEFUN([ZFS_AC_KERNEL_SET_NLINK], [
 	AC_MSG_CHECKING([whether set_nlink() is available])
 	ZFS_LINUX_TRY_COMPILE([
 		#include <linux/fs.h>
-	],[
 		struct inode node;
+	],[
 		unsigned int link = 0;
 		(void) set_nlink(&node, link);
 	],[
diff --git a/config/kernel-shrink.m4 b/config/kernel-shrink.m4
index a57c2af..4feb499 100644
--- a/config/kernel-shrink.m4
+++ b/config/kernel-shrink.m4
@@ -54,8 +54,8 @@ AC_DEFUN([ZFS_AC_KERNEL_S_INSTANCES_LIST_HEAD], [
 	AC_MSG_CHECKING([whether super_block has s_instances list_head])
 	ZFS_LINUX_TRY_COMPILE([
 		#include <linux/fs.h>
-	],[
 		struct super_block sb __attribute__ ((unused));
+	],[

 		INIT_LIST_HEAD(&sb.s_instances);
 	],[
  • Loading branch information
chrisrd committed Feb 15, 2018
1 parent 9c5167d commit 6f6c10c
Show file tree
Hide file tree
Showing 11 changed files with 15 additions and 11 deletions.
8 changes: 4 additions & 4 deletions config/deb.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ deb-local:
@(if test "${HAVE_DPKGBUILD}" = "no"; then \
echo -e "\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"; \
exit 1; \
exit 1; \
fi; \
if test "${HAVE_ALIEN}" = "no"; then \
echo -e "\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"; \
exit 1; \
exit 1; \
fi)

deb-kmod: deb-local rpm-kmod
Expand Down
1 change: 1 addition & 0 deletions config/kernel-acl.m4
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_PERMISSION_WITH_NAMEIDATA], [
AC_MSG_CHECKING([whether iops->permission() wants nameidata])
ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h>
#include <linux/sched.h>
int permission_fn(struct inode *inode, int mask,
struct nameidata *nd) { return 0; }
Expand Down
1 change: 1 addition & 0 deletions config/kernel-create-nameidata.m4
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_CREATE_NAMEIDATA], [
AC_MSG_CHECKING([whether iops->create() passes nameidata])
ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h>
#include <linux/sched.h>
#ifdef HAVE_MKDIR_UMODE_T
int inode_create(struct inode *inode ,struct dentry *dentry,
Expand Down
1 change: 1 addition & 0 deletions config/kernel-dentry-operations.m4
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_D_REVALIDATE_NAMEIDATA], [
AC_MSG_CHECKING([whether dops->d_revalidate() takes struct nameidata])
ZFS_LINUX_TRY_COMPILE([
#include <linux/dcache.h>
#include <linux/sched.h>
int revalidate (struct dentry *dentry,
struct nameidata *nidata) { return 0; }
Expand Down
2 changes: 1 addition & 1 deletion config/kernel-get-link.m4
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ AC_DEFUN([ZFS_AC_KERNEL_FOLLOW_LINK], [
AC_DEFINE(HAVE_FOLLOW_LINK_NAMEIDATA, 1,
[iops->follow_link() nameidata])
],[
AC_MSG_ERROR(no; please file a bug report)
AC_MSG_ERROR(no; please file a bug report)
])
])
])
Expand Down
1 change: 1 addition & 0 deletions config/kernel-lookup-nameidata.m4
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_LOOKUP_NAMEIDATA], [
AC_MSG_CHECKING([whether iops->lookup() passes nameidata])
ZFS_LINUX_TRY_COMPILE([
#include <linux/fs.h>
#include <linux/sched.h>
struct dentry *inode_lookup(struct inode *inode,
struct dentry *dentry, struct nameidata *nidata)
Expand Down
2 changes: 1 addition & 1 deletion config/kernel-vm_node_stat.m4
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ AC_DEFUN([ZFS_AC_KERNEL_VM_NODE_STAT], [
ZFS_LINUX_TRY_COMPILE([
#include <linux/mm.h>
#include <linux/vmstat.h>
],[
],[
int a __attribute__ ((unused)) = NR_VM_NODE_STAT_ITEMS;
long x __attribute__ ((unused)) =
atomic_long_read(&vm_node_stat[0]);
Expand Down
2 changes: 1 addition & 1 deletion config/kernel.m4
Original file line number Diff line number Diff line change
Expand Up @@ -711,7 +711,7 @@ AC_DEFUN([ZFS_LINUX_COMPILE_IFELSE], [
modpost_flag=''
test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
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],
[_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])]
)
Expand Down
4 changes: 2 additions & 2 deletions config/tgz.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ tgz-local:
@(if test "${HAVE_ALIEN}" = "no"; then \
echo -e "\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"; \
exit 1; \
exit 1; \
fi)

tgz-kmod: tgz-local rpm-kmod
Expand Down
2 changes: 1 addition & 1 deletion config/user-libblkid.m4
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [
LIBBLKID=
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_DEFINE([HAVE_LIBBLKID], 1, [Define if you have libblkid])
Expand Down
2 changes: 1 addition & 1 deletion config/user-libssl.m4
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBSSL], [
LIBSSL=
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_DEFINE([HAVE_LIBSSL], 1, [Define if you have libssl])
Expand Down

0 comments on commit 6f6c10c

Please sign in to comment.