forked from mirrors/nixpkgs
spl: Fix compilation on 3.13 and later kernels
This commit is contained in:
parent
17073197e9
commit
c5b3257388
61
pkgs/os-specific/linux/spl/3_13-compat-1.patch
Normal file
61
pkgs/os-specific/linux/spl/3_13-compat-1.patch
Normal file
|
@ -0,0 +1,61 @@
|
|||
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 @@
|
||||
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.8.5.5
|
||||
|
168
pkgs/os-specific/linux/spl/3_13-compat-2.patch
Normal file
168
pkgs/os-specific/linux/spl/3_13-compat-2.patch
Normal file
|
@ -0,0 +1,168 @@
|
|||
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 @@
|
||||
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 @@
|
||||
|
||||
#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 @@
|
||||
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 @@
|
||||
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.8.5.5
|
||||
|
|
@ -7,7 +7,7 @@ stdenv.mkDerivation {
|
|||
sha256 = "196scl8q0bkkak6m0p1l1fz254cgsizqm73bf9wk3iynamq7qmrw";
|
||||
};
|
||||
|
||||
patches = [ ./install_prefix.patch ./3_12-compat.patch ];
|
||||
patches = [ ./install_prefix.patch ./3_12-compat.patch ./3_13-compat-1.patch ./3_13-compat-2.patch ];
|
||||
|
||||
buildInputs = [ perl autoconf automake libtool ];
|
||||
|
||||
|
@ -15,7 +15,7 @@ stdenv.mkDerivation {
|
|||
./autogen.sh
|
||||
|
||||
substituteInPlace ./module/spl/spl-generic.c --replace /usr/bin/hostid hostid
|
||||
substituteInPlace ./module/spl/spl-module.c --replace /bin/mknod mknod
|
||||
substituteInPlace ./module/spl/spl-module.c --replace /bin/mknod mknod
|
||||
|
||||
substituteInPlace ./module/spl/spl-generic.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:${gawk}:/bin"
|
||||
substituteInPlace ./module/splat/splat-vnode.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:/bin"
|
||||
|
|
Loading…
Reference in a new issue