diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2014-05-19 11:08:11 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2014-05-19 11:08:11 +0000 |
commit | b4757511525f39fd8120d84a803bb8a7834dcc61 (patch) | |
tree | 083611d921f577d4e85c62dd1e03a8154a62d52e /testing/spl-grsec/linux-3.13.patch | |
parent | 7486d797b025ba70c3ec6028c8a5741e3fb4b7a4 (diff) | |
download | aports-b4757511525f39fd8120d84a803bb8a7834dcc61.tar.bz2 aports-b4757511525f39fd8120d84a803bb8a7834dcc61.tar.xz |
testing/spl-grsec: fix build with 3.13/3.14 kernels
Diffstat (limited to 'testing/spl-grsec/linux-3.13.patch')
-rw-r--r-- | testing/spl-grsec/linux-3.13.patch | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/testing/spl-grsec/linux-3.13.patch b/testing/spl-grsec/linux-3.13.patch new file mode 100644 index 000000000..483d559d3 --- /dev/null +++ b/testing/spl-grsec/linux-3.13.patch @@ -0,0 +1,232 @@ +From 50a0749eba31e821a7edf286f1e3b149f7d13c59 Mon Sep 17 00:00:00 2001 +From: Richard Yao <ryao@gentoo.org> +Date: Mon, 25 Nov 2013 11:22:33 -0500 +Subject: [PATCH] Linux 3.13 compat: Pass NULL for new delegated inode argument + +This check was originally added for SLES10, a093c6a, to check for +a 'struct vfsmount *' argument which they added. However, since +SLES10 is based on a 2.6.16 kernel which is no longer supported +this functionality was dropped. The checks were refactored to +support Linux 3.13 without concern for historical versions. + +Signed-off-by: Richard Yao <ryao@gentoo.org> +Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> +Closes #312 +--- + config/spl-build.m4 | 52 ++++++++++++++++++++++++++++++++++++++++---------- + module/spl/spl-vnode.c | 22 ++++++++++++--------- + 2 files changed, 55 insertions(+), 19 deletions(-) + +diff --git a/config/spl-build.m4 b/config/spl-build.m4 +index 7d744db..8426780 100644 +--- a/config/spl-build.m4 ++++ b/config/spl-build.m4 +@@ -1842,41 +1842,73 @@ AC_DEFUN([SPL_AC_SET_FS_PWD_WITH_CONST], + EXTRA_KCFLAGS="$tmp_flags" + ]) + +-dnl # +-dnl # SLES API change, never adopted in mainline, +-dnl # Third 'struct vfsmount *' argument removed. +-dnl # + AC_DEFUN([SPL_AC_2ARGS_VFS_UNLINK], + [AC_MSG_CHECKING([whether vfs_unlink() wants 2 args]) + SPL_LINUX_TRY_COMPILE([ + #include <linux/fs.h> + ],[ +- vfs_unlink(NULL, NULL); ++ vfs_unlink((struct inode *) NULL, (struct dentry *) NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_VFS_UNLINK, 1, + [vfs_unlink() wants 2 args]) + ],[ + AC_MSG_RESULT(no) ++ dnl # ++ dnl # Linux 3.13 API change ++ dnl # Added delegated inode ++ dnl # ++ AC_MSG_CHECKING([whether vfs_unlink() wants 3 args]) ++ SPL_LINUX_TRY_COMPILE([ ++ #include <linux/fs.h> ++ ],[ ++ vfs_unlink((struct inode *) NULL, ++ (struct dentry *) NULL, ++ (struct inode **) NULL); ++ ],[ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_3ARGS_VFS_UNLINK, 1, ++ [vfs_unlink() wants 3 args]) ++ ],[ ++ AC_MSG_ERROR(no) ++ ]) ++ + ]) + ]) + +-dnl # +-dnl # SLES API change, never adopted in mainline, +-dnl # Third and sixth 'struct vfsmount *' argument removed. +-dnl # + AC_DEFUN([SPL_AC_4ARGS_VFS_RENAME], + [AC_MSG_CHECKING([whether vfs_rename() wants 4 args]) + SPL_LINUX_TRY_COMPILE([ + #include <linux/fs.h> + ],[ +- vfs_rename(NULL, NULL, NULL, NULL); ++ vfs_rename((struct inode *) NULL, (struct dentry *) NULL, ++ (struct inode *) NULL, (struct dentry *) NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_4ARGS_VFS_RENAME, 1, + [vfs_rename() wants 4 args]) + ],[ + AC_MSG_RESULT(no) ++ dnl # ++ dnl # Linux 3.13 API change ++ dnl # Added delegated inode ++ dnl # ++ AC_MSG_CHECKING([whether vfs_rename() wants 5 args]) ++ SPL_LINUX_TRY_COMPILE([ ++ #include <linux/fs.h> ++ ],[ ++ vfs_rename((struct inode *) NULL, ++ (struct dentry *) NULL, ++ (struct inode *) NULL, ++ (struct dentry *) NULL, ++ (struct inode **) NULL); ++ ],[ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_5ARGS_VFS_RENAME, 1, ++ [vfs_rename() wants 5 args]) ++ ],[ ++ AC_MSG_ERROR(no) ++ ]) + ]) + ]) + +diff --git a/module/spl/spl-vnode.c b/module/spl/spl-vnode.c +index 0784ff2..5496067 100644 +--- a/module/spl/spl-vnode.c ++++ b/module/spl/spl-vnode.c +@@ -334,7 +334,11 @@ vn_remove(const char *path, uio_seg_t seg, int flags) + if (inode) + ihold(inode); + ++#ifdef HAVE_2ARGS_VFS_UNLINK + rc = vfs_unlink(parent.dentry->d_inode, dentry); ++#else ++ rc = vfs_unlink(parent.dentry->d_inode, dentry, NULL); ++#endif /* HAVE_2ARGS_VFS_UNLINK */ + exit1: + dput(dentry); + } else { +@@ -412,10 +416,10 @@ vn_rename(const char *oldname, const char *newname, int x1) + + #ifdef HAVE_4ARGS_VFS_RENAME + rc = vfs_rename(old_dir->d_inode, old_dentry, +- new_dir->d_inode, new_dentry); ++ new_dir->d_inode, new_dentry); + #else +- rc = vfs_rename(old_dir->d_inode, old_dentry, oldnd.nd_mnt, +- new_dir->d_inode, new_dentry, newnd.nd_mnt); ++ rc = vfs_rename(old_dir->d_inode, old_dentry, ++ new_dir->d_inode, new_dentry, NULL); + #endif /* HAVE_4ARGS_VFS_RENAME */ + exit4: + unlock_rename(new_dir, old_dir); +@@ -478,9 +482,9 @@ vn_remove(const char *path, uio_seg_t seg, int flags) + if (inode) + atomic_inc(&inode->i_count); + #ifdef HAVE_2ARGS_VFS_UNLINK +- rc = vfs_unlink(nd.nd_dentry->d_inode, dentry); ++ rc = vfs_unlink(nd.nd_dentry->d_inode, dentry); + #else +- rc = vfs_unlink(nd.nd_dentry->d_inode, dentry, nd.nd_mnt); ++ rc = vfs_unlink(nd.nd_dentry->d_inode, dentry, NULL); + #endif /* HAVE_2ARGS_VFS_UNLINK */ + exit2: + dput(dentry); +@@ -571,11 +575,11 @@ vn_rename(const char *oldname, const char *newname, int x1) + SGOTO(exit5, rc); + + #ifdef HAVE_4ARGS_VFS_RENAME +- rc = vfs_rename(old_dir->d_inode, old_dentry, +- new_dir->d_inode, new_dentry); ++ rc = vfs_rename(old_dir->d_inode, old_dentry, ++ new_dir->d_inode, new_dentry); + #else +- rc = vfs_rename(old_dir->d_inode, old_dentry, oldnd.nd_mnt, +- new_dir->d_inode, new_dentry, newnd.nd_mnt); ++ rc = vfs_rename(old_dir->d_inode, old_dentry, ++ new_dir->d_inode, new_dentry, NULL); + #endif /* HAVE_4ARGS_VFS_RENAME */ + exit5: + dput(new_dentry); +-- +1.9.3 + + + + +From 3e96de17d723d6f6c9e2fd04b059b50d4e0bbef0 Mon Sep 17 00:00:00 2001 +From: Richard Yao <ryao@gentoo.org> +Date: Thu, 8 Aug 2013 04:30:55 -0400 +Subject: [PATCH] Linux 3.13 compat: Remove unused flags variable from + __cv_init() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +GCC 4.8.1 complained about an unused flags variable when building +against Linux 2.6.26.8: + +/var/tmp/portage/sys-kernel/spl-9999/work/spl-9999/module/spl/../../module/spl/spl-condvar.c: +In function ‘__cv_init’: +/var/tmp/portage/sys-kernel/spl-9999/work/spl-9999/module/spl/../../module/spl/spl-condvar.c:39:6: +error: variable ‘flags’ set but not used +[-Werror=unused-but-set-variable] + int flags = KM_SLEEP; + ^ + cc1: all warnings being treated as errors + +Additionally, the superfluous code uses a preempt_count variable that is +no longer available on Linux 3.13. Deleting the unnecessary code fixes a +Linux 3.13 compatibility issue. + +Signed-off-by: Richard Yao <ryao@gentoo.org> +Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> +Closes #312 +--- + module/spl/spl-condvar.c | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/module/spl/spl-condvar.c b/module/spl/spl-condvar.c +index 283648a..8236412 100644 +--- a/module/spl/spl-condvar.c ++++ b/module/spl/spl-condvar.c +@@ -36,8 +36,6 @@ + void + __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg) + { +- int flags = KM_SLEEP; +- + SENTRY; + ASSERT(cvp); + ASSERT(name == NULL); +@@ -51,12 +49,6 @@ __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg) + atomic_set(&cvp->cv_refs, 1); + cvp->cv_mutex = NULL; + +- /* We may be called when there is a non-zero preempt_count or +- * interrupts are disabled is which case we must not sleep. +- */ +- if (current_thread_info()->preempt_count || irqs_disabled()) +- flags = KM_NOSLEEP; +- + SEXIT; + } + EXPORT_SYMBOL(__cv_init); +-- +1.9.3 + |