diff options
author | Ricardo M. Correia <rcorreia@wizy.org> | 2014-10-07 16:21:55 +0200 |
---|---|---|
committer | Ricardo M. Correia <rcorreia@wizy.org> | 2014-10-07 16:52:14 +0200 |
commit | ebfb50603694851c0044a02372d812603b0f6500 (patch) | |
tree | 77debbdd6aa13a07c6d94dc7f6f54838bdbd5c5b /pkgs/os-specific | |
parent | ff371b96dff876166bd46eb14161621a1637a98e (diff) | |
download | nixlib-ebfb50603694851c0044a02372d812603b0f6500.tar nixlib-ebfb50603694851c0044a02372d812603b0f6500.tar.gz nixlib-ebfb50603694851c0044a02372d812603b0f6500.tar.bz2 nixlib-ebfb50603694851c0044a02372d812603b0f6500.tar.lz nixlib-ebfb50603694851c0044a02372d812603b0f6500.tar.xz nixlib-ebfb50603694851c0044a02372d812603b0f6500.tar.zst nixlib-ebfb50603694851c0044a02372d812603b0f6500.zip |
spl: Backport compatibility patches for newer kernels
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r-- | pkgs/os-specific/linux/spl/default.nix | 2 | ||||
-rw-r--r-- | pkgs/os-specific/linux/spl/git.nix | 2 | ||||
-rw-r--r-- | pkgs/os-specific/linux/spl/kernel-3.16.patch | 34 | ||||
-rw-r--r-- | pkgs/os-specific/linux/spl/kernel-3.17.patch | 175 |
4 files changed, 211 insertions, 2 deletions
diff --git a/pkgs/os-specific/linux/spl/default.nix b/pkgs/os-specific/linux/spl/default.nix index 944fb6ff554c..7f1dad248e6f 100644 --- a/pkgs/os-specific/linux/spl/default.nix +++ b/pkgs/os-specific/linux/spl/default.nix @@ -7,7 +7,7 @@ stdenv.mkDerivation { sha256 = "1qqzyj2if5wai4jiwml4i8s6v8k7hbi7jmiph800lhkk5j8s72l9"; }; - patches = [ ./install_prefix.patch ./const.patch ]; + patches = [ ./install_prefix.patch ./const.patch ./kernel-3.16.patch ./kernel-3.17.patch ]; buildInputs = [ perl autoconf automake libtool ]; diff --git a/pkgs/os-specific/linux/spl/git.nix b/pkgs/os-specific/linux/spl/git.nix index d3ed285ccfef..93629495164b 100644 --- a/pkgs/os-specific/linux/spl/git.nix +++ b/pkgs/os-specific/linux/spl/git.nix @@ -8,7 +8,7 @@ stdenv.mkDerivation { sha256 = "0mcivbddms8kbapbs9x6achqyvh5i6h1rd2b3jm8g5yjn0flc5gl"; }; - patches = [ ./install_prefix.patch ./const.patch ]; + patches = [ ./install_prefix.patch ./const.patch ./kernel-3.16.patch ./kernel-3.17.patch ]; buildInputs = [ perl autoconf automake libtool ]; diff --git a/pkgs/os-specific/linux/spl/kernel-3.16.patch b/pkgs/os-specific/linux/spl/kernel-3.16.patch new file mode 100644 index 000000000000..25641c7a384f --- /dev/null +++ b/pkgs/os-specific/linux/spl/kernel-3.16.patch @@ -0,0 +1,34 @@ +From e3020723dc43af2bc22af0d68571a61daf9b44d0 Mon Sep 17 00:00:00 2001 +From: Turbo Fredriksson <turbo@bayour.com> +Date: Sun, 14 Sep 2014 15:47:22 +0000 +Subject: [PATCH] Linux 3.16 compat: smp_mb__after_clear_bit() + +The smp_mb__{before,after}_clear_bit functions have been renamed +smp_mb__{before,after}_atomic. Rather than adding a compatibility +function to handle this the code has been updated to use smp_wmb(). + +This has the advantage of being a stable functionally equivalent +interface. On many architectures smp_mb__after_clear_bit() expands +to smp_wmb(). Others might be able to do something slightly more +efficient but this will be safe and correct on all of them. + +Signed-off-by: Turbo Fredriksson <turbo@bayour.com> +Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> +Closes #386 +--- + module/spl/spl-kmem.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/module/spl/spl-kmem.c b/module/spl/spl-kmem.c +index 6de513e..79954eb 100644 +--- a/module/spl/spl-kmem.c ++++ b/module/spl/spl-kmem.c +@@ -2365,7 +2365,7 @@ spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count) + + spl_slab_reclaim(skc, count, 1); + clear_bit(KMC_BIT_REAPING, &skc->skc_flags); +- smp_mb__after_clear_bit(); ++ smp_wmb(); + wake_up_bit(&skc->skc_flags, KMC_BIT_REAPING); + out: + atomic_dec(&skc->skc_ref); diff --git a/pkgs/os-specific/linux/spl/kernel-3.17.patch b/pkgs/os-specific/linux/spl/kernel-3.17.patch new file mode 100644 index 000000000000..f5ce2c8805d8 --- /dev/null +++ b/pkgs/os-specific/linux/spl/kernel-3.17.patch @@ -0,0 +1,175 @@ +From 2fc44f66ec9b83069593d87cf311069458c0d5ae Mon Sep 17 00:00:00 2001 +From: Ned Bass <bass6@llnl.gov> +Date: Fri, 8 Aug 2014 17:41:22 -0700 +Subject: [PATCH] Linux 3.17 compat: remove wait_on_bit action function + +Linux kernel 3.17 removes the action function argument from +wait_on_bit(). Add autoconf test and compatibility macro to support +the new interface. + +The former "wait_on_bit" interface required an 'action' function to +be provided which does the actual waiting. There were over 20 such +functions in the kernel, many of them identical, though most cases +can be satisfied by one of just two functions: one which uses +io_schedule() and one which just uses schedule(). This API change +was made to consolidate all of those redundant wait functions. + +References: torvalds/linux@7431620 + +Signed-off-by: Ned Bass <bass6@llnl.gov> +Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> +Closes #378 +--- + config/spl-build.m4 | 26 ++++++++++++++++++++++++++ + include/linux/Makefile.am | 1 + + include/linux/wait_compat.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ + include/sys/types.h | 1 + + module/spl/spl-kmem.c | 11 ++--------- + 5 files changed, 75 insertions(+), 9 deletions(-) + create mode 100644 include/linux/wait_compat.h + +diff --git a/config/spl-build.m4 b/config/spl-build.m4 +index eef5233..2514d8c 100644 +--- a/config/spl-build.m4 ++++ b/config/spl-build.m4 +@@ -94,6 +94,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ + SPL_AC_2ARGS_VFS_GETATTR + SPL_AC_USLEEP_RANGE + SPL_AC_KMEM_CACHE_ALLOCFLAGS ++ SPL_AC_WAIT_ON_BIT + ]) + + AC_DEFUN([SPL_AC_MODULE_SYMVERS], [ +@@ -2570,3 +2571,28 @@ AC_DEFUN([SPL_AC_KMEM_CACHE_ALLOCFLAGS], [ + ]) + ]) + ]) ++ ++dnl # ++dnl # 3.17 API change, ++dnl # wait_on_bit() no longer requires an action argument. The former ++dnl # "wait_on_bit" interface required an 'action' function to be provided ++dnl # which does the actual waiting. There were over 20 such functions in the ++dnl # kernel, many of them identical, though most cases can be satisfied by one ++dnl # of just two functions: one which uses io_schedule() and one which just ++dnl # uses schedule(). This API change was made to consolidate all of those ++dnl # redundant wait functions. ++dnl # ++AC_DEFUN([SPL_AC_WAIT_ON_BIT], [ ++ AC_MSG_CHECKING([whether wait_on_bit() takes an action]) ++ SPL_LINUX_TRY_COMPILE([ ++ #include <linux/wait.h> ++ ],[ ++ int (*action)(void *) = NULL; ++ wait_on_bit(NULL, 0, action, 0); ++ ],[ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_WAIT_ON_BIT_ACTION, 1, [yes]) ++ ],[ ++ AC_MSG_RESULT(no) ++ ]) ++]) +diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am +index 59f2ec5..ec7023d 100644 +--- a/include/linux/Makefile.am ++++ b/include/linux/Makefile.am +@@ -17,6 +17,7 @@ KERNEL_H = \ + $(top_srcdir)/include/linux/sysctl_compat.h \ + $(top_srcdir)/include/linux/time_compat.h \ + $(top_srcdir)/include/linux/uaccess_compat.h \ ++ $(top_srcdir)/include/linux/wait_compat.h \ + $(top_srcdir)/include/linux/zlib_compat.h + + USER_H = +diff --git a/include/linux/wait_compat.h b/include/linux/wait_compat.h +new file mode 100644 +index 0000000..66f9a9a +--- /dev/null ++++ b/include/linux/wait_compat.h +@@ -0,0 +1,45 @@ ++/*****************************************************************************\ ++ * Copyright (C) 2007-2014 Lawrence Livermore National Security, LLC. ++ * Copyright (C) 2007 The Regents of the University of California. ++ * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). ++ * Written by Brian Behlendorf <behlendorf1@llnl.gov>. ++ * UCRL-CODE-235197 ++ * ++ * This file is part of the SPL, Solaris Porting Layer. ++ * For details, see <http://zfsonlinux.org/>. ++ * ++ * The SPL is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ * ++ * The SPL is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with the SPL. If not, see <http://www.gnu.org/licenses/>. ++\*****************************************************************************/ ++ ++#ifndef _SPL_WAIT_COMPAT_H ++#define _SPL_WAIT_COMPAT_H ++ ++ ++#ifndef HAVE_WAIT_ON_BIT_ACTION ++# define spl_wait_on_bit(word, bit, mode) wait_on_bit(word, bit, mode) ++#else ++ ++static inline int ++spl_bit_wait(void *word) ++{ ++ schedule(); ++ return 0; ++} ++ ++#define spl_wait_on_bit(word, bit, mode) \ ++ wait_on_bit(word, bit, spl_bit_wait, mode) ++ ++#endif /* HAVE_WAIT_ON_BIT_ACTION */ ++ ++#endif /* SPL_WAIT_COMPAT_H */ +diff --git a/include/sys/types.h b/include/sys/types.h +index decb6bb..fcec0fa 100644 +--- a/include/sys/types.h ++++ b/include/sys/types.h +@@ -43,6 +43,7 @@ + #include <linux/zlib_compat.h> + #include <linux/mm_compat.h> + #include <linux/delay.h> ++#include <linux/wait_compat.h> + + #ifndef HAVE_UINTPTR_T + typedef unsigned long uintptr_t; +diff --git a/module/spl/spl-kmem.c b/module/spl/spl-kmem.c +index 0a9d775..6de513e 100644 +--- a/module/spl/spl-kmem.c ++++ b/module/spl/spl-kmem.c +@@ -1900,13 +1900,6 @@ spl_cache_grow_wait(spl_kmem_cache_t *skc) + return !test_bit(KMC_BIT_GROWING, &skc->skc_flags); + } + +-static int +-spl_cache_reclaim_wait(void *word) +-{ +- schedule(); +- return 0; +-} +- + /* + * No available objects on any slabs, create a new slab. Note that this + * functionality is disabled for KMC_SLAB caches which are backed by the +@@ -1928,8 +1921,8 @@ spl_cache_grow(spl_kmem_cache_t *skc, int flags, void **obj) + * then return so the local magazine can be rechecked for new objects. + */ + if (test_bit(KMC_BIT_REAPING, &skc->skc_flags)) { +- rc = wait_on_bit(&skc->skc_flags, KMC_BIT_REAPING, +- spl_cache_reclaim_wait, TASK_UNINTERRUPTIBLE); ++ rc = spl_wait_on_bit(&skc->skc_flags, KMC_BIT_REAPING, ++ TASK_UNINTERRUPTIBLE); + SRETURN(rc ? rc : -EAGAIN); + } + |