From b4757511525f39fd8120d84a803bb8a7834dcc61 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Mon, 19 May 2014 11:08:11 +0000 Subject: testing/spl-grsec: fix build with 3.13/3.14 kernels --- testing/spl-grsec/APKBUILD | 16 ++- testing/spl-grsec/linux-3.13.patch | 232 +++++++++++++++++++++++++++++++++++++ 2 files changed, 242 insertions(+), 6 deletions(-) create mode 100644 testing/spl-grsec/linux-3.13.patch diff --git a/testing/spl-grsec/APKBUILD b/testing/spl-grsec/APKBUILD index c4af44c45b..99433e9a13 100644 --- a/testing/spl-grsec/APKBUILD +++ b/testing/spl-grsec/APKBUILD @@ -26,8 +26,7 @@ pkgver=$_kver pkgrel=$(($_kpkgrel + $_mypkgrel)) pkgdesc="Solaris Porting Layer" url="http://zfsonlinux.org" -#arch="x86 x86_64" -arch= +arch="x86 x86_64" license="GPL" depends="" depends_dev="linux-grsec-dev=$_kernelver" @@ -35,7 +34,9 @@ makedepends="$depends_dev perl automake autoconf libtool" install="" subpackages="$pkgname-dev $pkgname-utils" source="http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-$_realver.tar.gz - linux-3.12.patch" + linux-3.12.patch + linux-3.13.patch + " _builddir="$srcdir"/spl-$_realver @@ -86,8 +87,11 @@ utils() { } md5sums="f00535bf89a7fde0e08f44a14a1f1e03 spl-0.6.2.tar.gz -e6d211f6311d8e3b86e64069242e571b linux-3.12.patch" +e6d211f6311d8e3b86e64069242e571b linux-3.12.patch +748bbd0f0e402dda14549261866b2900 linux-3.13.patch" sha256sums="3c577c7055d6c73179726b9c8a7fd48f9122be0b345c50cd54732e801165daa4 spl-0.6.2.tar.gz -f4f70183f8f8acacbda303709a98222af593f0f2eac893fbecf0e12d8a05bb3e linux-3.12.patch" +f4f70183f8f8acacbda303709a98222af593f0f2eac893fbecf0e12d8a05bb3e linux-3.12.patch +0ce776e548ca153ad9423d292295becee852d08a732a203cfb091ae5f253b71c linux-3.13.patch" sha512sums="a79bc730f80e08e917249a0872d1215fd8507c9fcf42a63d6abf320befadea94973df6530c110701f554005309dbbcefb4b6b17a3da38e8a70c8e1b186bae6a6 spl-0.6.2.tar.gz -894ed56e75ed662dcdd51b900bf5407b5450c818e817560f8b135677beb03d4316564511547ee35b5106a669c3035d9e81830d26eec9f0d68f7bf5f58a05c930 linux-3.12.patch" +894ed56e75ed662dcdd51b900bf5407b5450c818e817560f8b135677beb03d4316564511547ee35b5106a669c3035d9e81830d26eec9f0d68f7bf5f58a05c930 linux-3.12.patch +695fc6e1923503f5fd5235814b91faec5d31e3cf6d063718342312c14a266ad64093da6deb0ecce22fd6d379bf7fe7af1a4e11cdf78475b53fc1d7bdd966c4e6 linux-3.13.patch" diff --git a/testing/spl-grsec/linux-3.13.patch b/testing/spl-grsec/linux-3.13.patch new file mode 100644 index 0000000000..483d559d3a --- /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 +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 +Signed-off-by: Brian Behlendorf +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 + ],[ +- 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 ++ ],[ ++ 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 + ],[ +- 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 ++ ],[ ++ 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 +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 +Signed-off-by: Brian Behlendorf +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 + -- cgit v1.2.3