aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testing/spl-grsec/APKBUILD16
-rw-r--r--testing/spl-grsec/linux-3.13.patch232
2 files changed, 242 insertions, 6 deletions
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 <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
+