From a304018b5838673547bf26112f00cd0708a6c236 Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 9 Feb 2014 02:00:31 -0800 Subject: [PATCH 1/9] Update to 0.6.2_3.13.2-1 --- spl-utils/PKGBUILD | 4 ++-- spl/PKGBUILD | 8 ++++---- zfs-utils/PKGBUILD | 4 ++-- zfs/PKGBUILD | 10 +++++----- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/spl-utils/PKGBUILD b/spl-utils/PKGBUILD index 89bb522..e53922c 100644 --- a/spl-utils/PKGBUILD +++ b/spl-utils/PKGBUILD @@ -11,8 +11,8 @@ pkgname="spl-utils" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.12.9 -pkgrel=2 +pkgver=0.6.2_3.13.2 +pkgrel=1 pkgdesc="Solaris Porting Layer kernel module support files." arch=("i686" "x86_64") url="http://zfsonlinux.org/" diff --git a/spl/PKGBUILD b/spl/PKGBUILD index a070f45..94a4c17 100644 --- a/spl/PKGBUILD +++ b/spl/PKGBUILD @@ -11,14 +11,14 @@ pkgname="spl" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.12.9 -pkgrel=2 +pkgver=0.6.2_3.13.2 +pkgrel=1 # Used incase the i686 and x86_64 linux packages get out of sync with the # PKGREL. This occurred on January 31, 2014 where i686 was versioned at # 3.12.9-1 and x86_64 was versioned at 3.12.9-2. -LINUX_VERSION_X32="3.12.9-1" -LINUX_VERSION_X64="3.12.9-2" +LINUX_VERSION_X32="3.13.2-1" +LINUX_VERSION_X64="3.13.2-1" [[ $CARCH == "i686" ]] && LINUX_VERSION=$LINUX_VERSION_X32 || LINUX_VERSION=$LINUX_VERSION_X64 pkgdesc="Solaris Porting Layer kernel modules." diff --git a/zfs-utils/PKGBUILD b/zfs-utils/PKGBUILD index 5cbb842..7eb884e 100644 --- a/zfs-utils/PKGBUILD +++ b/zfs-utils/PKGBUILD @@ -11,8 +11,8 @@ pkgname="zfs-utils" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.12.9 -pkgrel=2 +pkgver=0.6.2_3.13.2 +pkgrel=1 pkgdesc="Kernel module support files for the Zettabyte File System." depends=("spl") arch=("i686" "x86_64") diff --git a/zfs/PKGBUILD b/zfs/PKGBUILD index 081e8a4..1adb573 100644 --- a/zfs/PKGBUILD +++ b/zfs/PKGBUILD @@ -11,18 +11,18 @@ pkgname="zfs" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.12.9 -pkgrel=2 +pkgver=0.6.2_3.13.2 +pkgrel=1 # Used incase the i686 and x86_64 linux packages get out of sync with the # PKGREL. This occurred on January 31, 2014 where i686 was versioned at # 3.12.9-1 and x86_64 was versioned at 3.12.9-2. -LINUX_VERSION_X32="3.12.9-1" -LINUX_VERSION_X64="3.12.9-2" +LINUX_VERSION_X32="3.13.2-1" +LINUX_VERSION_X64="3.13.2-1" [[ $CARCH == "i686" ]] && LINUX_VERSION=$LINUX_VERSION_X32 || LINUX_VERSION=$LINUX_VERSION_X64 pkgdesc="Kernel modules for the Zettabyte File System." -depends=("spl=0.6.2_3.12.9-2" "zfs-utils" "linux=$LINUX_VERSION") +depends=("spl=0.6.2_3.13.2-1" "zfs-utils" "linux=$LINUX_VERSION") makedepends=("linux-headers=$LINUX_VERSION") arch=("i686" "x86_64") url="http://zfsonlinux.org/" From f4f78cc1459f157eb528bf92950a7f84f54b171e Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 9 Feb 2014 02:54:44 -0800 Subject: [PATCH 2/9] spl: Add linux-3.13-compat patches --- spl/PKGBUILD | 14 +- spl/linux-3.12-compat-shrinker-api.patch | 429 ++++++++++++++++++ spl/linux-3.13-compat-inode-argument.patch | 162 +++++++ ...inux-3.13-compat-remove-unused-flags.patch | 162 +++++++ 4 files changed, 764 insertions(+), 3 deletions(-) create mode 100644 spl/linux-3.12-compat-shrinker-api.patch create mode 100644 spl/linux-3.13-compat-inode-argument.patch create mode 100644 spl/linux-3.13-compat-remove-unused-flags.patch diff --git a/spl/PKGBUILD b/spl/PKGBUILD index 94a4c17..b427ba6 100644 --- a/spl/PKGBUILD +++ b/spl/PKGBUILD @@ -27,16 +27,22 @@ makedepends=("linux-headers=$LINUX_VERSION") arch=("i686" "x86_64") url="http://zfsonlinux.org/" source=(http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-0.6.2.tar.gz - shrinker_api_fix.patch) + linux-3.12-compat-shrinker-api.patch + linux-3.13-compat-remove-unused-flags.patch + linux-3.13-compat-inode-argument.patch) groups=("archzfs") md5sums=('f00535bf89a7fde0e08f44a14a1f1e03' - '4d30dbda61995e77c5ca976abb80bad6') + '4d30dbda61995e77c5ca976abb80bad6' + '98081399cdad56e84be109ba68ef9213' + 'ad9a409db6ee851c4ff381beaf4bd33a') license=("GPL") install=spl.install prepare() { cd "$srcdir/spl-0.6.2" - patch -Np1 < ../shrinker_api_fix.patch + patch -Np1 < ../linux-3.12-compat-shrinker-api.patch + patch -Np1 < ../linux-3.13-compat-inode-argument.patch + patch -Np1 < ../linux-3.13-compat-remove-unused-flags.patch } build() { @@ -44,9 +50,11 @@ build() { ./autogen.sh if [[ $CARCH == "i686" ]]; then ./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X32-ARCH/build \ --with-config=kernel --enable-atomic-spinlocks else ./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X64-ARCH/build \ --with-config=kernel fi make diff --git a/spl/linux-3.12-compat-shrinker-api.patch b/spl/linux-3.12-compat-shrinker-api.patch new file mode 100644 index 0000000..b196098 --- /dev/null +++ b/spl/linux-3.12-compat-shrinker-api.patch @@ -0,0 +1,429 @@ +commit c3d9c0df3ee8d43db22815ebbfbe8b803fa46e46 +Author: Richard Yao +Date: Tue Nov 5 11:35:54 2013 -0500 + + Linux 3.12 compat: New shrinker API + + torvalds/linux@24f7c6 introduced a new shrinker API while + torvalds/linux@a0b021 dropped support for the old shrinker API. + This patch adds support for the new shrinker API by wrapping + the old one with the new one. + + This change also reorganizes the autotools checks on the shrinker + API such that the configure script will fail early if an unknown + API is encountered in the future. + + Support for the set_shrinker() API which was used by Linux 2.6.22 + and older has been dropped. As a general rule compatibility is + only maintained back to Linux 2.6.26. + + Signed-off-by: Richard Yao + Signed-off-by: Brian Behlendorf + Closes zfsonlinux/zfs#1732 + Closes zfsonlinux/zfs#1822 + Closes #293 + Closes #307 + +diff --git a/config/spl-build.m4 b/config/spl-build.m4 +index b0e3348..7d744db 100644 +--- a/config/spl-build.m4 ++++ b/config/spl-build.m4 +@@ -27,8 +27,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ + SPL_AC_TYPE_ATOMIC64_XCHG + SPL_AC_TYPE_UINTPTR_T + SPL_AC_2ARGS_REGISTER_SYSCTL +- SPL_AC_SET_SHRINKER +- SPL_AC_3ARGS_SHRINKER_CALLBACK ++ SPL_AC_SHRINKER_CALLBACK + SPL_AC_PATH_IN_NAMEIDATA + SPL_AC_TASK_CURR + SPL_AC_CTL_UNNUMBERED +@@ -885,37 +884,18 @@ AC_DEFUN([SPL_AC_2ARGS_REGISTER_SYSCTL], + ]) + ]) + +-dnl # +-dnl # 2.6.23 API change +-dnl # Old set_shrinker API replaced with register_shrinker +-dnl # +-AC_DEFUN([SPL_AC_SET_SHRINKER], [ +- AC_MSG_CHECKING([whether set_shrinker() available]) +- SPL_LINUX_TRY_COMPILE([ +- #include +- ],[ +- return set_shrinker(DEFAULT_SEEKS, NULL); +- ],[ +- AC_MSG_RESULT([yes]) +- AC_DEFINE(HAVE_SET_SHRINKER, 1, +- [set_shrinker() available]) +- ],[ +- AC_MSG_RESULT([no]) +- ]) +-]) +- +-dnl # +-dnl # 2.6.35 API change, +-dnl # Add context to shrinker callback +-dnl # +-AC_DEFUN([SPL_AC_3ARGS_SHRINKER_CALLBACK], +- [AC_MSG_CHECKING([whether shrinker callback wants 3 args]) ++AC_DEFUN([SPL_AC_SHRINKER_CALLBACK],[ + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" ++ dnl # ++ dnl # 2.6.23 to 2.6.34 API change ++ dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask) ++ dnl # ++ AC_MSG_CHECKING([whether old 2-argument shrinker exists]) + SPL_LINUX_TRY_COMPILE([ + #include + +- int shrinker_cb(struct shrinker *, int, unsigned int); ++ int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); + ],[ + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, +@@ -924,10 +904,86 @@ AC_DEFUN([SPL_AC_3ARGS_SHRINKER_CALLBACK], + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, +- [shrinker callback wants 3 args]) ++ AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1, ++ [old shrinker callback wants 2 args]) + ],[ + AC_MSG_RESULT(no) ++ dnl # ++ dnl # 2.6.35 - 2.6.39 API change ++ dnl # ->shrink(struct shrinker *, ++ dnl # int nr_to_scan, gfp_t gfp_mask) ++ dnl # ++ AC_MSG_CHECKING([whether old 3-argument shrinker exists]) ++ SPL_LINUX_TRY_COMPILE([ ++ #include ++ ++ int shrinker_cb(struct shrinker *, int nr_to_scan, ++ gfp_t gfp_mask); ++ ],[ ++ struct shrinker cache_shrinker = { ++ .shrink = shrinker_cb, ++ .seeks = DEFAULT_SEEKS, ++ }; ++ register_shrinker(&cache_shrinker); ++ ],[ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, ++ [old shrinker callback wants 3 args]) ++ ],[ ++ AC_MSG_RESULT(no) ++ dnl # ++ dnl # 3.0 - 3.11 API change ++ dnl # ->shrink(struct shrinker *, ++ dnl # struct shrink_control *sc) ++ dnl # ++ AC_MSG_CHECKING( ++ [whether new 2-argument shrinker exists]) ++ SPL_LINUX_TRY_COMPILE([ ++ #include ++ ++ int shrinker_cb(struct shrinker *, ++ struct shrink_control *sc); ++ ],[ ++ struct shrinker cache_shrinker = { ++ .shrink = shrinker_cb, ++ .seeks = DEFAULT_SEEKS, ++ }; ++ register_shrinker(&cache_shrinker); ++ ],[ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1, ++ [new shrinker callback wants 2 args]) ++ ],[ ++ AC_MSG_RESULT(no) ++ dnl # ++ dnl # 3.12 API change, ++ dnl # ->shrink() is logically split in to ++ dnl # ->count_objects() and ->scan_objects() ++ dnl # ++ AC_MSG_CHECKING( ++ [whether ->count_objects callback exists]) ++ SPL_LINUX_TRY_COMPILE([ ++ #include ++ ++ unsigned long shrinker_cb( ++ struct shrinker *, ++ struct shrink_control *sc); ++ ],[ ++ struct shrinker cache_shrinker = { ++ .count_objects = shrinker_cb, ++ .scan_objects = shrinker_cb, ++ .seeks = DEFAULT_SEEKS, ++ }; ++ register_shrinker(&cache_shrinker); ++ ],[ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK, ++ 1, [->count_objects exists]) ++ ],[ ++ AC_MSG_ERROR(error) ++ ]) ++ ]) ++ ]) + ]) + EXTRA_KCFLAGS="$tmp_flags" + ]) +diff --git a/include/linux/mm_compat.h b/include/linux/mm_compat.h +index cb1bef9..37c9b08 100644 +--- a/include/linux/mm_compat.h ++++ b/include/linux/mm_compat.h +@@ -148,107 +148,167 @@ extern shrink_icache_memory_t shrink_icache_memory_fn; + #endif /* HAVE_SHRINK_ICACHE_MEMORY */ + + /* +- * Linux 2.6. - 2.6. Shrinker API Compatibility. ++ * Due to frequent changes in the shrinker API the following ++ * compatibility wrappers should be used. They are as follows: ++ * ++ * SPL_SHRINKER_DECLARE is used to declare the shrinker which is ++ * passed to spl_register_shrinker()/spl_unregister_shrinker(). Use ++ * shrinker_name to set the shrinker variable name, shrinker_callback ++ * to set the callback function, and seek_cost to define the cost of ++ * reclaiming an object. ++ * ++ * SPL_SHRINKER_DECLARE(shrinker_name, shrinker_callback, seek_cost); ++ * ++ * SPL_SHRINKER_CALLBACK_FWD_DECLARE is used when a forward declaration ++ * of the shrinker callback function is required. Only the callback ++ * function needs to be passed. ++ * ++ * SPL_SHRINKER_CALLBACK_FWD_DECLARE(shrinker_callback); ++ * ++ * SPL_SHRINKER_CALLBACK_WRAPPER is used to declare the callback function ++ * which is registered with the shrinker. This function will call your ++ * custom shrinker which must use the following prototype. Notice the ++ * leading __'s, these must be appended to the callback_function name. ++ * ++ * int __shrinker_callback(struct shrinker *, struct shrink_control *) ++ * SPL_SHRINKER_CALLBACK_WRAPPER(shrinker_callback);a ++ * ++ * ++ * Example: ++ * ++ * SPL_SHRINKER_CALLBACK_FWD_DECLARE(my_shrinker_fn); ++ * SPL_SHRINKER_DECLARE(my_shrinker, my_shrinker_fn, 1); ++ * ++ * static int ++ * __my_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc) ++ * { ++ * if (sc->nr_to_scan) { ++ * ...scan objects in the cache and reclaim them... ++ * } ++ * ++ * ...calculate number of objects in the cache... ++ * ++ * return (number of objects in the cache); ++ * } ++ * SPL_SHRINKER_CALLBACK_WRAPPER(my_shrinker_fn); + */ +-#ifdef HAVE_SET_SHRINKER +-typedef struct spl_shrinker { +- struct shrinker *shrinker; +- shrinker_t fn; +- int seeks; +-} spl_shrinker_t; +- +-static inline void +-spl_register_shrinker(spl_shrinker_t *ss) +-{ +- ss->shrinker = set_shrinker(ss->seeks, ss->fn); +-} + +-static inline void +-spl_unregister_shrinker(spl_shrinker_t *ss) +-{ +- remove_shrinker(ss->shrinker); +-} ++#define spl_register_shrinker(x) register_shrinker(x) ++#define spl_unregister_shrinker(x) unregister_shrinker(x) + +-# define SPL_SHRINKER_DECLARE(s, x, y) \ +- static spl_shrinker_t s = { \ +- .shrinker = NULL, \ +- .fn = x, \ +- .seeks = y \ +- } +- +-# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +- static int fn(int, unsigned int) +-# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +-static int \ +-fn(int nr_to_scan, unsigned int gfp_mask) \ +-{ \ +- struct shrink_control sc; \ +- \ +- sc.nr_to_scan = nr_to_scan; \ +- sc.gfp_mask = gfp_mask; \ +- \ +- return __ ## fn(NULL, &sc); \ ++/* ++ * Linux 2.6.23 - 2.6.34 Shrinker API Compatibility. ++ */ ++#if defined(HAVE_2ARGS_OLD_SHRINKER_CALLBACK) ++#define SPL_SHRINKER_DECLARE(s, x, y) \ ++static struct shrinker s = { \ ++ .shrink = x, \ ++ .seeks = y \ + } + +-#else ++#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ ++static int fn(int nr_to_scan, unsigned int gfp_mask) + +-# define spl_register_shrinker(x) register_shrinker(x) +-# define spl_unregister_shrinker(x) unregister_shrinker(x) +-# define SPL_SHRINKER_DECLARE(s, x, y) \ +- static struct shrinker s = { \ +- .shrink = x, \ +- .seeks = y \ +- } ++#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ ++static int \ ++fn(int nr_to_scan, unsigned int gfp_mask) \ ++{ \ ++ struct shrink_control sc; \ ++ \ ++ sc.nr_to_scan = nr_to_scan; \ ++ sc.gfp_mask = gfp_mask; \ ++ \ ++ return (__ ## fn(NULL, &sc)); \ ++} + + /* +- * Linux 2.6. - 2.6. Shrinker API Compatibility. ++ * Linux 2.6.35 to 2.6.39 Shrinker API Compatibility. + */ +-# if defined(HAVE_SHRINK_CONTROL_STRUCT) +-# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +- static int fn(struct shrinker *, struct shrink_control *) +-# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +-static int \ +-fn(struct shrinker *shrink, struct shrink_control *sc) { \ +- return __ ## fn(shrink, sc); \ ++#elif defined(HAVE_3ARGS_SHRINKER_CALLBACK) ++#define SPL_SHRINKER_DECLARE(s, x, y) \ ++static struct shrinker s = { \ ++ .shrink = x, \ ++ .seeks = y \ ++} ++ ++#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ ++static int fn(struct shrinker *, int, unsigned int) ++ ++#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ ++static int \ ++fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask) \ ++{ \ ++ struct shrink_control sc; \ ++ \ ++ sc.nr_to_scan = nr_to_scan; \ ++ sc.gfp_mask = gfp_mask; \ ++ \ ++ return (__ ## fn(shrink, &sc)); \ + } + + /* +- * Linux 2.6. - 2.6. Shrinker API Compatibility. ++ * Linux 3.0 to 3.11 Shrinker API Compatibility. + */ +-# elif defined(HAVE_3ARGS_SHRINKER_CALLBACK) +-# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +- static int fn(struct shrinker *, int, unsigned int) +-# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +-static int \ +-fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask) \ +-{ \ +- struct shrink_control sc; \ +- \ +- sc.nr_to_scan = nr_to_scan; \ +- sc.gfp_mask = gfp_mask; \ +- \ +- return __ ## fn(shrink, &sc); \ ++#elif defined(HAVE_2ARGS_NEW_SHRINKER_CALLBACK) ++#define SPL_SHRINKER_DECLARE(s, x, y) \ ++static struct shrinker s = { \ ++ .shrink = x, \ ++ .seeks = y \ ++} ++ ++#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ ++static int fn(struct shrinker *, struct shrink_control *) ++ ++#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ ++static int \ ++fn(struct shrinker *shrink, struct shrink_control *sc) \ ++{ \ ++ return (__ ## fn(shrink, sc)); \ + } + + /* +- * Linux 2.6. - 2.6. Shrinker API Compatibility. ++ * Linux 3.12 and later Shrinker API Compatibility. + */ +-# else +-# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +- static int fn(int, unsigned int) +-# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +-static int \ +-fn(int nr_to_scan, unsigned int gfp_mask) \ +-{ \ +- struct shrink_control sc; \ +- \ +- sc.nr_to_scan = nr_to_scan; \ +- sc.gfp_mask = gfp_mask; \ +- \ +- return __ ## fn(NULL, &sc); \ ++#elif defined(HAVE_SPLIT_SHRINKER_CALLBACK) ++#define SPL_SHRINKER_DECLARE(s, x, y) \ ++static struct shrinker s = { \ ++ .count_objects = x ## _count_objects, \ ++ .scan_objects = x ## _scan_objects, \ ++ .seeks = y \ + } + +-# endif +-#endif /* HAVE_SET_SHRINKER */ ++#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ ++static unsigned long fn ## _count_objects(struct shrinker *, \ ++ struct shrink_control *); \ ++static unsigned long fn ## _scan_objects(struct shrinker *, \ ++ struct shrink_control *) ++ ++#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ ++static unsigned long \ ++fn ## _count_objects(struct shrinker *shrink, struct shrink_control *sc)\ ++{ \ ++ int __ret__; \ ++ \ ++ sc->nr_to_scan = 0; \ ++ __ret__ = __ ## fn(NULL, sc); \ ++ \ ++ /* Errors may not be returned and must be converted to zeros */ \ ++ return ((__ret__ < 0) ? 0 : __ret__); \ ++} \ ++ \ ++static unsigned long \ ++fn ## _scan_objects(struct shrinker *shrink, struct shrink_control *sc) \ ++{ \ ++ int __ret__; \ ++ \ ++ __ret__ = __ ## fn(NULL, sc); \ ++ return ((__ret__ < 0) ? SHRINK_STOP : __ret__); \ ++} ++#else ++/* ++ * Linux 2.x to 2.6.22, or a newer shrinker API has been introduced. ++ */ ++#error "Unknown shrinker callback" ++#endif + + #endif /* SPL_MM_COMPAT_H */ diff --git a/spl/linux-3.13-compat-inode-argument.patch b/spl/linux-3.13-compat-inode-argument.patch new file mode 100644 index 0000000..9b5169d --- /dev/null +++ b/spl/linux-3.13-compat-inode-argument.patch @@ -0,0 +1,162 @@ +commit 50a0749eba31e821a7edf286f1e3b149f7d13c59 +Author: Richard Yao +Date: Mon Nov 25 11:22:33 2013 -0500 + + 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 + +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); diff --git a/spl/linux-3.13-compat-remove-unused-flags.patch b/spl/linux-3.13-compat-remove-unused-flags.patch new file mode 100644 index 0000000..9b5169d --- /dev/null +++ b/spl/linux-3.13-compat-remove-unused-flags.patch @@ -0,0 +1,162 @@ +commit 50a0749eba31e821a7edf286f1e3b149f7d13c59 +Author: Richard Yao +Date: Mon Nov 25 11:22:33 2013 -0500 + + 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 + +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); From ccd4e76940f2e486b96fce3abfb68c25342944af Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 9 Feb 2014 02:55:25 -0800 Subject: [PATCH 3/9] spl-utils: Remove uneeded patch --- spl-utils/PKGBUILD | 17 +- spl-utils/shrinker_api_fix.patch | 429 ------------------------------- spl/shrinker_api_fix.patch | 429 ------------------------------- 3 files changed, 9 insertions(+), 866 deletions(-) delete mode 100644 spl-utils/shrinker_api_fix.patch delete mode 100644 spl/shrinker_api_fix.patch diff --git a/spl-utils/PKGBUILD b/spl-utils/PKGBUILD index e53922c..7289534 100644 --- a/spl-utils/PKGBUILD +++ b/spl-utils/PKGBUILD @@ -17,7 +17,6 @@ pkgdesc="Solaris Porting Layer kernel module support files." arch=("i686" "x86_64") url="http://zfsonlinux.org/" source=(http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-0.6.2.tar.gz - shrinker_api_fix.patch spl-utils.hostid) groups=("archzfs") md5sums=('f00535bf89a7fde0e08f44a14a1f1e03' @@ -25,16 +24,18 @@ md5sums=('f00535bf89a7fde0e08f44a14a1f1e03' 'a54f0041a9e15b050f25c463f1db7449') license=("GPL") -prepare() { - cd "$srcdir/spl-0.6.2" - patch -Np1 < ../shrinker_api_fix.patch -} - build() { cd "$srcdir/spl-0.6.2" ./autogen.sh - ./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \ - --with-config=user + if [[ $CARCH == "i686" ]]; then + ./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X32-ARCH/build \ + --with-config=user + else + ./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X64-ARCH/build \ + --with-config=user + fi make } diff --git a/spl-utils/shrinker_api_fix.patch b/spl-utils/shrinker_api_fix.patch deleted file mode 100644 index b196098..0000000 --- a/spl-utils/shrinker_api_fix.patch +++ /dev/null @@ -1,429 +0,0 @@ -commit c3d9c0df3ee8d43db22815ebbfbe8b803fa46e46 -Author: Richard Yao -Date: Tue Nov 5 11:35:54 2013 -0500 - - Linux 3.12 compat: New shrinker API - - torvalds/linux@24f7c6 introduced a new shrinker API while - torvalds/linux@a0b021 dropped support for the old shrinker API. - This patch adds support for the new shrinker API by wrapping - the old one with the new one. - - This change also reorganizes the autotools checks on the shrinker - API such that the configure script will fail early if an unknown - API is encountered in the future. - - Support for the set_shrinker() API which was used by Linux 2.6.22 - and older has been dropped. As a general rule compatibility is - only maintained back to Linux 2.6.26. - - Signed-off-by: Richard Yao - Signed-off-by: Brian Behlendorf - Closes zfsonlinux/zfs#1732 - Closes zfsonlinux/zfs#1822 - Closes #293 - Closes #307 - -diff --git a/config/spl-build.m4 b/config/spl-build.m4 -index b0e3348..7d744db 100644 ---- a/config/spl-build.m4 -+++ b/config/spl-build.m4 -@@ -27,8 +27,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ - SPL_AC_TYPE_ATOMIC64_XCHG - SPL_AC_TYPE_UINTPTR_T - SPL_AC_2ARGS_REGISTER_SYSCTL -- SPL_AC_SET_SHRINKER -- SPL_AC_3ARGS_SHRINKER_CALLBACK -+ SPL_AC_SHRINKER_CALLBACK - SPL_AC_PATH_IN_NAMEIDATA - SPL_AC_TASK_CURR - SPL_AC_CTL_UNNUMBERED -@@ -885,37 +884,18 @@ AC_DEFUN([SPL_AC_2ARGS_REGISTER_SYSCTL], - ]) - ]) - --dnl # --dnl # 2.6.23 API change --dnl # Old set_shrinker API replaced with register_shrinker --dnl # --AC_DEFUN([SPL_AC_SET_SHRINKER], [ -- AC_MSG_CHECKING([whether set_shrinker() available]) -- SPL_LINUX_TRY_COMPILE([ -- #include -- ],[ -- return set_shrinker(DEFAULT_SEEKS, NULL); -- ],[ -- AC_MSG_RESULT([yes]) -- AC_DEFINE(HAVE_SET_SHRINKER, 1, -- [set_shrinker() available]) -- ],[ -- AC_MSG_RESULT([no]) -- ]) --]) -- --dnl # --dnl # 2.6.35 API change, --dnl # Add context to shrinker callback --dnl # --AC_DEFUN([SPL_AC_3ARGS_SHRINKER_CALLBACK], -- [AC_MSG_CHECKING([whether shrinker callback wants 3 args]) -+AC_DEFUN([SPL_AC_SHRINKER_CALLBACK],[ - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="-Werror" -+ dnl # -+ dnl # 2.6.23 to 2.6.34 API change -+ dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask) -+ dnl # -+ AC_MSG_CHECKING([whether old 2-argument shrinker exists]) - SPL_LINUX_TRY_COMPILE([ - #include - -- int shrinker_cb(struct shrinker *, int, unsigned int); -+ int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); - ],[ - struct shrinker cache_shrinker = { - .shrink = shrinker_cb, -@@ -924,10 +904,86 @@ AC_DEFUN([SPL_AC_3ARGS_SHRINKER_CALLBACK], - register_shrinker(&cache_shrinker); - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, -- [shrinker callback wants 3 args]) -+ AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1, -+ [old shrinker callback wants 2 args]) - ],[ - AC_MSG_RESULT(no) -+ dnl # -+ dnl # 2.6.35 - 2.6.39 API change -+ dnl # ->shrink(struct shrinker *, -+ dnl # int nr_to_scan, gfp_t gfp_mask) -+ dnl # -+ AC_MSG_CHECKING([whether old 3-argument shrinker exists]) -+ SPL_LINUX_TRY_COMPILE([ -+ #include -+ -+ int shrinker_cb(struct shrinker *, int nr_to_scan, -+ gfp_t gfp_mask); -+ ],[ -+ struct shrinker cache_shrinker = { -+ .shrink = shrinker_cb, -+ .seeks = DEFAULT_SEEKS, -+ }; -+ register_shrinker(&cache_shrinker); -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, -+ [old shrinker callback wants 3 args]) -+ ],[ -+ AC_MSG_RESULT(no) -+ dnl # -+ dnl # 3.0 - 3.11 API change -+ dnl # ->shrink(struct shrinker *, -+ dnl # struct shrink_control *sc) -+ dnl # -+ AC_MSG_CHECKING( -+ [whether new 2-argument shrinker exists]) -+ SPL_LINUX_TRY_COMPILE([ -+ #include -+ -+ int shrinker_cb(struct shrinker *, -+ struct shrink_control *sc); -+ ],[ -+ struct shrinker cache_shrinker = { -+ .shrink = shrinker_cb, -+ .seeks = DEFAULT_SEEKS, -+ }; -+ register_shrinker(&cache_shrinker); -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1, -+ [new shrinker callback wants 2 args]) -+ ],[ -+ AC_MSG_RESULT(no) -+ dnl # -+ dnl # 3.12 API change, -+ dnl # ->shrink() is logically split in to -+ dnl # ->count_objects() and ->scan_objects() -+ dnl # -+ AC_MSG_CHECKING( -+ [whether ->count_objects callback exists]) -+ SPL_LINUX_TRY_COMPILE([ -+ #include -+ -+ unsigned long shrinker_cb( -+ struct shrinker *, -+ struct shrink_control *sc); -+ ],[ -+ struct shrinker cache_shrinker = { -+ .count_objects = shrinker_cb, -+ .scan_objects = shrinker_cb, -+ .seeks = DEFAULT_SEEKS, -+ }; -+ register_shrinker(&cache_shrinker); -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK, -+ 1, [->count_objects exists]) -+ ],[ -+ AC_MSG_ERROR(error) -+ ]) -+ ]) -+ ]) - ]) - EXTRA_KCFLAGS="$tmp_flags" - ]) -diff --git a/include/linux/mm_compat.h b/include/linux/mm_compat.h -index cb1bef9..37c9b08 100644 ---- a/include/linux/mm_compat.h -+++ b/include/linux/mm_compat.h -@@ -148,107 +148,167 @@ extern shrink_icache_memory_t shrink_icache_memory_fn; - #endif /* HAVE_SHRINK_ICACHE_MEMORY */ - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Due to frequent changes in the shrinker API the following -+ * compatibility wrappers should be used. They are as follows: -+ * -+ * SPL_SHRINKER_DECLARE is used to declare the shrinker which is -+ * passed to spl_register_shrinker()/spl_unregister_shrinker(). Use -+ * shrinker_name to set the shrinker variable name, shrinker_callback -+ * to set the callback function, and seek_cost to define the cost of -+ * reclaiming an object. -+ * -+ * SPL_SHRINKER_DECLARE(shrinker_name, shrinker_callback, seek_cost); -+ * -+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE is used when a forward declaration -+ * of the shrinker callback function is required. Only the callback -+ * function needs to be passed. -+ * -+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE(shrinker_callback); -+ * -+ * SPL_SHRINKER_CALLBACK_WRAPPER is used to declare the callback function -+ * which is registered with the shrinker. This function will call your -+ * custom shrinker which must use the following prototype. Notice the -+ * leading __'s, these must be appended to the callback_function name. -+ * -+ * int __shrinker_callback(struct shrinker *, struct shrink_control *) -+ * SPL_SHRINKER_CALLBACK_WRAPPER(shrinker_callback);a -+ * -+ * -+ * Example: -+ * -+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE(my_shrinker_fn); -+ * SPL_SHRINKER_DECLARE(my_shrinker, my_shrinker_fn, 1); -+ * -+ * static int -+ * __my_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc) -+ * { -+ * if (sc->nr_to_scan) { -+ * ...scan objects in the cache and reclaim them... -+ * } -+ * -+ * ...calculate number of objects in the cache... -+ * -+ * return (number of objects in the cache); -+ * } -+ * SPL_SHRINKER_CALLBACK_WRAPPER(my_shrinker_fn); - */ --#ifdef HAVE_SET_SHRINKER --typedef struct spl_shrinker { -- struct shrinker *shrinker; -- shrinker_t fn; -- int seeks; --} spl_shrinker_t; -- --static inline void --spl_register_shrinker(spl_shrinker_t *ss) --{ -- ss->shrinker = set_shrinker(ss->seeks, ss->fn); --} - --static inline void --spl_unregister_shrinker(spl_shrinker_t *ss) --{ -- remove_shrinker(ss->shrinker); --} -+#define spl_register_shrinker(x) register_shrinker(x) -+#define spl_unregister_shrinker(x) unregister_shrinker(x) - --# define SPL_SHRINKER_DECLARE(s, x, y) \ -- static spl_shrinker_t s = { \ -- .shrinker = NULL, \ -- .fn = x, \ -- .seeks = y \ -- } -- --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(int, unsigned int) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(int nr_to_scan, unsigned int gfp_mask) \ --{ \ -- struct shrink_control sc; \ -- \ -- sc.nr_to_scan = nr_to_scan; \ -- sc.gfp_mask = gfp_mask; \ -- \ -- return __ ## fn(NULL, &sc); \ -+/* -+ * Linux 2.6.23 - 2.6.34 Shrinker API Compatibility. -+ */ -+#if defined(HAVE_2ARGS_OLD_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .shrink = x, \ -+ .seeks = y \ - } - --#else -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static int fn(int nr_to_scan, unsigned int gfp_mask) - --# define spl_register_shrinker(x) register_shrinker(x) --# define spl_unregister_shrinker(x) unregister_shrinker(x) --# define SPL_SHRINKER_DECLARE(s, x, y) \ -- static struct shrinker s = { \ -- .shrink = x, \ -- .seeks = y \ -- } -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static int \ -+fn(int nr_to_scan, unsigned int gfp_mask) \ -+{ \ -+ struct shrink_control sc; \ -+ \ -+ sc.nr_to_scan = nr_to_scan; \ -+ sc.gfp_mask = gfp_mask; \ -+ \ -+ return (__ ## fn(NULL, &sc)); \ -+} - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Linux 2.6.35 to 2.6.39 Shrinker API Compatibility. - */ --# if defined(HAVE_SHRINK_CONTROL_STRUCT) --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(struct shrinker *, struct shrink_control *) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(struct shrinker *shrink, struct shrink_control *sc) { \ -- return __ ## fn(shrink, sc); \ -+#elif defined(HAVE_3ARGS_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .shrink = x, \ -+ .seeks = y \ -+} -+ -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static int fn(struct shrinker *, int, unsigned int) -+ -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static int \ -+fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask) \ -+{ \ -+ struct shrink_control sc; \ -+ \ -+ sc.nr_to_scan = nr_to_scan; \ -+ sc.gfp_mask = gfp_mask; \ -+ \ -+ return (__ ## fn(shrink, &sc)); \ - } - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Linux 3.0 to 3.11 Shrinker API Compatibility. - */ --# elif defined(HAVE_3ARGS_SHRINKER_CALLBACK) --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(struct shrinker *, int, unsigned int) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask) \ --{ \ -- struct shrink_control sc; \ -- \ -- sc.nr_to_scan = nr_to_scan; \ -- sc.gfp_mask = gfp_mask; \ -- \ -- return __ ## fn(shrink, &sc); \ -+#elif defined(HAVE_2ARGS_NEW_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .shrink = x, \ -+ .seeks = y \ -+} -+ -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static int fn(struct shrinker *, struct shrink_control *) -+ -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static int \ -+fn(struct shrinker *shrink, struct shrink_control *sc) \ -+{ \ -+ return (__ ## fn(shrink, sc)); \ - } - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Linux 3.12 and later Shrinker API Compatibility. - */ --# else --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(int, unsigned int) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(int nr_to_scan, unsigned int gfp_mask) \ --{ \ -- struct shrink_control sc; \ -- \ -- sc.nr_to_scan = nr_to_scan; \ -- sc.gfp_mask = gfp_mask; \ -- \ -- return __ ## fn(NULL, &sc); \ -+#elif defined(HAVE_SPLIT_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .count_objects = x ## _count_objects, \ -+ .scan_objects = x ## _scan_objects, \ -+ .seeks = y \ - } - --# endif --#endif /* HAVE_SET_SHRINKER */ -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static unsigned long fn ## _count_objects(struct shrinker *, \ -+ struct shrink_control *); \ -+static unsigned long fn ## _scan_objects(struct shrinker *, \ -+ struct shrink_control *) -+ -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static unsigned long \ -+fn ## _count_objects(struct shrinker *shrink, struct shrink_control *sc)\ -+{ \ -+ int __ret__; \ -+ \ -+ sc->nr_to_scan = 0; \ -+ __ret__ = __ ## fn(NULL, sc); \ -+ \ -+ /* Errors may not be returned and must be converted to zeros */ \ -+ return ((__ret__ < 0) ? 0 : __ret__); \ -+} \ -+ \ -+static unsigned long \ -+fn ## _scan_objects(struct shrinker *shrink, struct shrink_control *sc) \ -+{ \ -+ int __ret__; \ -+ \ -+ __ret__ = __ ## fn(NULL, sc); \ -+ return ((__ret__ < 0) ? SHRINK_STOP : __ret__); \ -+} -+#else -+/* -+ * Linux 2.x to 2.6.22, or a newer shrinker API has been introduced. -+ */ -+#error "Unknown shrinker callback" -+#endif - - #endif /* SPL_MM_COMPAT_H */ diff --git a/spl/shrinker_api_fix.patch b/spl/shrinker_api_fix.patch deleted file mode 100644 index b196098..0000000 --- a/spl/shrinker_api_fix.patch +++ /dev/null @@ -1,429 +0,0 @@ -commit c3d9c0df3ee8d43db22815ebbfbe8b803fa46e46 -Author: Richard Yao -Date: Tue Nov 5 11:35:54 2013 -0500 - - Linux 3.12 compat: New shrinker API - - torvalds/linux@24f7c6 introduced a new shrinker API while - torvalds/linux@a0b021 dropped support for the old shrinker API. - This patch adds support for the new shrinker API by wrapping - the old one with the new one. - - This change also reorganizes the autotools checks on the shrinker - API such that the configure script will fail early if an unknown - API is encountered in the future. - - Support for the set_shrinker() API which was used by Linux 2.6.22 - and older has been dropped. As a general rule compatibility is - only maintained back to Linux 2.6.26. - - Signed-off-by: Richard Yao - Signed-off-by: Brian Behlendorf - Closes zfsonlinux/zfs#1732 - Closes zfsonlinux/zfs#1822 - Closes #293 - Closes #307 - -diff --git a/config/spl-build.m4 b/config/spl-build.m4 -index b0e3348..7d744db 100644 ---- a/config/spl-build.m4 -+++ b/config/spl-build.m4 -@@ -27,8 +27,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ - SPL_AC_TYPE_ATOMIC64_XCHG - SPL_AC_TYPE_UINTPTR_T - SPL_AC_2ARGS_REGISTER_SYSCTL -- SPL_AC_SET_SHRINKER -- SPL_AC_3ARGS_SHRINKER_CALLBACK -+ SPL_AC_SHRINKER_CALLBACK - SPL_AC_PATH_IN_NAMEIDATA - SPL_AC_TASK_CURR - SPL_AC_CTL_UNNUMBERED -@@ -885,37 +884,18 @@ AC_DEFUN([SPL_AC_2ARGS_REGISTER_SYSCTL], - ]) - ]) - --dnl # --dnl # 2.6.23 API change --dnl # Old set_shrinker API replaced with register_shrinker --dnl # --AC_DEFUN([SPL_AC_SET_SHRINKER], [ -- AC_MSG_CHECKING([whether set_shrinker() available]) -- SPL_LINUX_TRY_COMPILE([ -- #include -- ],[ -- return set_shrinker(DEFAULT_SEEKS, NULL); -- ],[ -- AC_MSG_RESULT([yes]) -- AC_DEFINE(HAVE_SET_SHRINKER, 1, -- [set_shrinker() available]) -- ],[ -- AC_MSG_RESULT([no]) -- ]) --]) -- --dnl # --dnl # 2.6.35 API change, --dnl # Add context to shrinker callback --dnl # --AC_DEFUN([SPL_AC_3ARGS_SHRINKER_CALLBACK], -- [AC_MSG_CHECKING([whether shrinker callback wants 3 args]) -+AC_DEFUN([SPL_AC_SHRINKER_CALLBACK],[ - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="-Werror" -+ dnl # -+ dnl # 2.6.23 to 2.6.34 API change -+ dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask) -+ dnl # -+ AC_MSG_CHECKING([whether old 2-argument shrinker exists]) - SPL_LINUX_TRY_COMPILE([ - #include - -- int shrinker_cb(struct shrinker *, int, unsigned int); -+ int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); - ],[ - struct shrinker cache_shrinker = { - .shrink = shrinker_cb, -@@ -924,10 +904,86 @@ AC_DEFUN([SPL_AC_3ARGS_SHRINKER_CALLBACK], - register_shrinker(&cache_shrinker); - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, -- [shrinker callback wants 3 args]) -+ AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1, -+ [old shrinker callback wants 2 args]) - ],[ - AC_MSG_RESULT(no) -+ dnl # -+ dnl # 2.6.35 - 2.6.39 API change -+ dnl # ->shrink(struct shrinker *, -+ dnl # int nr_to_scan, gfp_t gfp_mask) -+ dnl # -+ AC_MSG_CHECKING([whether old 3-argument shrinker exists]) -+ SPL_LINUX_TRY_COMPILE([ -+ #include -+ -+ int shrinker_cb(struct shrinker *, int nr_to_scan, -+ gfp_t gfp_mask); -+ ],[ -+ struct shrinker cache_shrinker = { -+ .shrink = shrinker_cb, -+ .seeks = DEFAULT_SEEKS, -+ }; -+ register_shrinker(&cache_shrinker); -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, -+ [old shrinker callback wants 3 args]) -+ ],[ -+ AC_MSG_RESULT(no) -+ dnl # -+ dnl # 3.0 - 3.11 API change -+ dnl # ->shrink(struct shrinker *, -+ dnl # struct shrink_control *sc) -+ dnl # -+ AC_MSG_CHECKING( -+ [whether new 2-argument shrinker exists]) -+ SPL_LINUX_TRY_COMPILE([ -+ #include -+ -+ int shrinker_cb(struct shrinker *, -+ struct shrink_control *sc); -+ ],[ -+ struct shrinker cache_shrinker = { -+ .shrink = shrinker_cb, -+ .seeks = DEFAULT_SEEKS, -+ }; -+ register_shrinker(&cache_shrinker); -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1, -+ [new shrinker callback wants 2 args]) -+ ],[ -+ AC_MSG_RESULT(no) -+ dnl # -+ dnl # 3.12 API change, -+ dnl # ->shrink() is logically split in to -+ dnl # ->count_objects() and ->scan_objects() -+ dnl # -+ AC_MSG_CHECKING( -+ [whether ->count_objects callback exists]) -+ SPL_LINUX_TRY_COMPILE([ -+ #include -+ -+ unsigned long shrinker_cb( -+ struct shrinker *, -+ struct shrink_control *sc); -+ ],[ -+ struct shrinker cache_shrinker = { -+ .count_objects = shrinker_cb, -+ .scan_objects = shrinker_cb, -+ .seeks = DEFAULT_SEEKS, -+ }; -+ register_shrinker(&cache_shrinker); -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK, -+ 1, [->count_objects exists]) -+ ],[ -+ AC_MSG_ERROR(error) -+ ]) -+ ]) -+ ]) - ]) - EXTRA_KCFLAGS="$tmp_flags" - ]) -diff --git a/include/linux/mm_compat.h b/include/linux/mm_compat.h -index cb1bef9..37c9b08 100644 ---- a/include/linux/mm_compat.h -+++ b/include/linux/mm_compat.h -@@ -148,107 +148,167 @@ extern shrink_icache_memory_t shrink_icache_memory_fn; - #endif /* HAVE_SHRINK_ICACHE_MEMORY */ - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Due to frequent changes in the shrinker API the following -+ * compatibility wrappers should be used. They are as follows: -+ * -+ * SPL_SHRINKER_DECLARE is used to declare the shrinker which is -+ * passed to spl_register_shrinker()/spl_unregister_shrinker(). Use -+ * shrinker_name to set the shrinker variable name, shrinker_callback -+ * to set the callback function, and seek_cost to define the cost of -+ * reclaiming an object. -+ * -+ * SPL_SHRINKER_DECLARE(shrinker_name, shrinker_callback, seek_cost); -+ * -+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE is used when a forward declaration -+ * of the shrinker callback function is required. Only the callback -+ * function needs to be passed. -+ * -+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE(shrinker_callback); -+ * -+ * SPL_SHRINKER_CALLBACK_WRAPPER is used to declare the callback function -+ * which is registered with the shrinker. This function will call your -+ * custom shrinker which must use the following prototype. Notice the -+ * leading __'s, these must be appended to the callback_function name. -+ * -+ * int __shrinker_callback(struct shrinker *, struct shrink_control *) -+ * SPL_SHRINKER_CALLBACK_WRAPPER(shrinker_callback);a -+ * -+ * -+ * Example: -+ * -+ * SPL_SHRINKER_CALLBACK_FWD_DECLARE(my_shrinker_fn); -+ * SPL_SHRINKER_DECLARE(my_shrinker, my_shrinker_fn, 1); -+ * -+ * static int -+ * __my_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc) -+ * { -+ * if (sc->nr_to_scan) { -+ * ...scan objects in the cache and reclaim them... -+ * } -+ * -+ * ...calculate number of objects in the cache... -+ * -+ * return (number of objects in the cache); -+ * } -+ * SPL_SHRINKER_CALLBACK_WRAPPER(my_shrinker_fn); - */ --#ifdef HAVE_SET_SHRINKER --typedef struct spl_shrinker { -- struct shrinker *shrinker; -- shrinker_t fn; -- int seeks; --} spl_shrinker_t; -- --static inline void --spl_register_shrinker(spl_shrinker_t *ss) --{ -- ss->shrinker = set_shrinker(ss->seeks, ss->fn); --} - --static inline void --spl_unregister_shrinker(spl_shrinker_t *ss) --{ -- remove_shrinker(ss->shrinker); --} -+#define spl_register_shrinker(x) register_shrinker(x) -+#define spl_unregister_shrinker(x) unregister_shrinker(x) - --# define SPL_SHRINKER_DECLARE(s, x, y) \ -- static spl_shrinker_t s = { \ -- .shrinker = NULL, \ -- .fn = x, \ -- .seeks = y \ -- } -- --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(int, unsigned int) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(int nr_to_scan, unsigned int gfp_mask) \ --{ \ -- struct shrink_control sc; \ -- \ -- sc.nr_to_scan = nr_to_scan; \ -- sc.gfp_mask = gfp_mask; \ -- \ -- return __ ## fn(NULL, &sc); \ -+/* -+ * Linux 2.6.23 - 2.6.34 Shrinker API Compatibility. -+ */ -+#if defined(HAVE_2ARGS_OLD_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .shrink = x, \ -+ .seeks = y \ - } - --#else -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static int fn(int nr_to_scan, unsigned int gfp_mask) - --# define spl_register_shrinker(x) register_shrinker(x) --# define spl_unregister_shrinker(x) unregister_shrinker(x) --# define SPL_SHRINKER_DECLARE(s, x, y) \ -- static struct shrinker s = { \ -- .shrink = x, \ -- .seeks = y \ -- } -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static int \ -+fn(int nr_to_scan, unsigned int gfp_mask) \ -+{ \ -+ struct shrink_control sc; \ -+ \ -+ sc.nr_to_scan = nr_to_scan; \ -+ sc.gfp_mask = gfp_mask; \ -+ \ -+ return (__ ## fn(NULL, &sc)); \ -+} - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Linux 2.6.35 to 2.6.39 Shrinker API Compatibility. - */ --# if defined(HAVE_SHRINK_CONTROL_STRUCT) --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(struct shrinker *, struct shrink_control *) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(struct shrinker *shrink, struct shrink_control *sc) { \ -- return __ ## fn(shrink, sc); \ -+#elif defined(HAVE_3ARGS_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .shrink = x, \ -+ .seeks = y \ -+} -+ -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static int fn(struct shrinker *, int, unsigned int) -+ -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static int \ -+fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask) \ -+{ \ -+ struct shrink_control sc; \ -+ \ -+ sc.nr_to_scan = nr_to_scan; \ -+ sc.gfp_mask = gfp_mask; \ -+ \ -+ return (__ ## fn(shrink, &sc)); \ - } - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Linux 3.0 to 3.11 Shrinker API Compatibility. - */ --# elif defined(HAVE_3ARGS_SHRINKER_CALLBACK) --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(struct shrinker *, int, unsigned int) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask) \ --{ \ -- struct shrink_control sc; \ -- \ -- sc.nr_to_scan = nr_to_scan; \ -- sc.gfp_mask = gfp_mask; \ -- \ -- return __ ## fn(shrink, &sc); \ -+#elif defined(HAVE_2ARGS_NEW_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .shrink = x, \ -+ .seeks = y \ -+} -+ -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static int fn(struct shrinker *, struct shrink_control *) -+ -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static int \ -+fn(struct shrinker *shrink, struct shrink_control *sc) \ -+{ \ -+ return (__ ## fn(shrink, sc)); \ - } - - /* -- * Linux 2.6. - 2.6. Shrinker API Compatibility. -+ * Linux 3.12 and later Shrinker API Compatibility. - */ --# else --# define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -- static int fn(int, unsigned int) --# define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ --static int \ --fn(int nr_to_scan, unsigned int gfp_mask) \ --{ \ -- struct shrink_control sc; \ -- \ -- sc.nr_to_scan = nr_to_scan; \ -- sc.gfp_mask = gfp_mask; \ -- \ -- return __ ## fn(NULL, &sc); \ -+#elif defined(HAVE_SPLIT_SHRINKER_CALLBACK) -+#define SPL_SHRINKER_DECLARE(s, x, y) \ -+static struct shrinker s = { \ -+ .count_objects = x ## _count_objects, \ -+ .scan_objects = x ## _scan_objects, \ -+ .seeks = y \ - } - --# endif --#endif /* HAVE_SET_SHRINKER */ -+#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ -+static unsigned long fn ## _count_objects(struct shrinker *, \ -+ struct shrink_control *); \ -+static unsigned long fn ## _scan_objects(struct shrinker *, \ -+ struct shrink_control *) -+ -+#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ -+static unsigned long \ -+fn ## _count_objects(struct shrinker *shrink, struct shrink_control *sc)\ -+{ \ -+ int __ret__; \ -+ \ -+ sc->nr_to_scan = 0; \ -+ __ret__ = __ ## fn(NULL, sc); \ -+ \ -+ /* Errors may not be returned and must be converted to zeros */ \ -+ return ((__ret__ < 0) ? 0 : __ret__); \ -+} \ -+ \ -+static unsigned long \ -+fn ## _scan_objects(struct shrinker *shrink, struct shrink_control *sc) \ -+{ \ -+ int __ret__; \ -+ \ -+ __ret__ = __ ## fn(NULL, sc); \ -+ return ((__ret__ < 0) ? SHRINK_STOP : __ret__); \ -+} -+#else -+/* -+ * Linux 2.x to 2.6.22, or a newer shrinker API has been introduced. -+ */ -+#error "Unknown shrinker callback" -+#endif - - #endif /* SPL_MM_COMPAT_H */ From 08ebda5c653d3003fd57a6e5b9bba7c6a7931f3c Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 9 Feb 2014 02:55:58 -0800 Subject: [PATCH 4/9] zfs*: Add --with-linux configure option --- zfs-utils/PKGBUILD | 32 +++++++++++++++++++++++--------- zfs/PKGBUILD | 32 +++++++++++++++++++++++--------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/zfs-utils/PKGBUILD b/zfs-utils/PKGBUILD index 7eb884e..38601df 100644 --- a/zfs-utils/PKGBUILD +++ b/zfs-utils/PKGBUILD @@ -33,15 +33,29 @@ license=("CDDL") build() { cd "$srcdir/zfs-0.6.2" ./autogen.sh - ./configure --prefix=/usr \ - --sysconfdir=/etc \ - --sbindir=/usr/bin \ - --libdir=/usr/lib \ - --datadir=/usr/share \ - --includedir=/usr/include \ - --with-udevdir=/lib/udev \ - --libexecdir=/usr/lib/zfs-0.6.2 \ - --with-config=user + if [[ $CARCH == "i686" ]]; then + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --libdir=/usr/lib \ + --datadir=/usr/share \ + --includedir=/usr/include \ + --with-udevdir=/lib/udev \ + --libexecdir=/usr/lib/zfs-0.6.2 \ + --with-config=user \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X32-ARCH/build + else + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --libdir=/usr/lib \ + --datadir=/usr/share \ + --includedir=/usr/include \ + --with-udevdir=/lib/udev \ + --libexecdir=/usr/lib/zfs-0.6.2 \ + --with-config=user \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X64-ARCH/build + fi make } diff --git a/zfs/PKGBUILD b/zfs/PKGBUILD index 1adb573..12e8aba 100644 --- a/zfs/PKGBUILD +++ b/zfs/PKGBUILD @@ -35,15 +35,29 @@ install=zfs.install build() { cd "$srcdir/zfs-0.6.2" ./autogen.sh - ./configure --prefix=/usr \ - --sysconfdir=/etc \ - --sbindir=/usr/bin \ - --libdir=/usr/lib \ - --datadir=/usr/share \ - --includedir=/usr/include \ - --with-udevdir=/lib/udev \ - --libexecdir=/usr/lib/zfs-0.6.2 \ - --with-config=kernel + if [[ $CARCH == "i686" ]]; then + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --libdir=/usr/lib \ + --datadir=/usr/share \ + --includedir=/usr/include \ + --with-udevdir=/lib/udev \ + --libexecdir=/usr/lib/zfs-0.6.2 \ + --with-config=kernel \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X32-ARCH/build + else + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --libdir=/usr/lib \ + --datadir=/usr/share \ + --includedir=/usr/include \ + --with-udevdir=/lib/udev \ + --libexecdir=/usr/lib/zfs-0.6.2 \ + --with-config=kernel \ + --with-linux=/usr/lib/modules/$LINUX_VERSION_X64-ARCH/build + fi make } From ee60b34cdb91fa5ced842c1b585f4dd1eb6299a0 Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 9 Feb 2014 02:56:29 -0800 Subject: [PATCH 5/9] Update to 0.6.2_3.13.2-1 --- conf.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/conf.sh b/conf.sh index 2cc54bd..4f4580b 100644 --- a/conf.sh +++ b/conf.sh @@ -1,20 +1,19 @@ # Version information -AZB_PKGREL="2" # The pkgrel of all the archzfs packages +AZB_PKGREL="1" # The pkgrel of all the archzfs packages # ZFSonLinux version AZB_ZOL_VERSION="0.6.2" -# Linux version dependencies +# Core repo Linux version dependencies AZB_LINUX_VERSION="3.12.9" AZB_LINUX_X32_PKGREL="1" AZB_LINUX_X64_PKGREL="2" -AZB_LINUX_X32_VERSION_FULL="$AZB_LINUX_VERSION-$AZB_LINUX_X32_PKGREL" -AZB_LINUX_X64_VERSION_FULL="$AZB_LINUX_VERSION-$AZB_LINUX_X64_PKGREL" +AZB_LINUX_X32_VERSION="$AZB_LINUX_VERSION-$AZB_LINUX_X32_PKGREL" +AZB_LINUX_X64_VERSION="$AZB_LINUX_VERSION-$AZB_LINUX_X64_PKGREL" AZB_LINUX_PKG_VERSION="${AZB_ZOL_VERSION}_${AZB_LINUX_VERSION}" AZB_LINUX_FULL_VERSION="$AZB_LINUX_PKG_VERSION-$AZB_PKGREL" -# Linux version dependencies (testing) -# Usefull for testing on minor kernel upgrades +# Testing repo Linux version dependencies AZB_LINUX_TEST_VERSION="3.13.2" AZB_LINUX_TEST_X32_PKGREL="1" AZB_LINUX_TEST_X64_PKGREL="1" From 9cc004cd7454a2099371b0c6daa50334b5151b5f Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 9 Feb 2014 02:57:49 -0800 Subject: [PATCH 6/9] spl*: update package sums --- spl-utils/PKGBUILD | 1 - spl/PKGBUILD | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/spl-utils/PKGBUILD b/spl-utils/PKGBUILD index 7289534..f523912 100644 --- a/spl-utils/PKGBUILD +++ b/spl-utils/PKGBUILD @@ -20,7 +20,6 @@ source=(http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-0.6.2.tar.gz spl-utils.hostid) groups=("archzfs") md5sums=('f00535bf89a7fde0e08f44a14a1f1e03' - '4d30dbda61995e77c5ca976abb80bad6' 'a54f0041a9e15b050f25c463f1db7449') license=("GPL") diff --git a/spl/PKGBUILD b/spl/PKGBUILD index b427ba6..a5995e6 100644 --- a/spl/PKGBUILD +++ b/spl/PKGBUILD @@ -33,7 +33,7 @@ source=(http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-0.6.2.tar.gz groups=("archzfs") md5sums=('f00535bf89a7fde0e08f44a14a1f1e03' '4d30dbda61995e77c5ca976abb80bad6' - '98081399cdad56e84be109ba68ef9213' + 'ad9a409db6ee851c4ff381beaf4bd33a' 'ad9a409db6ee851c4ff381beaf4bd33a') license=("GPL") install=spl.install From 5a03cd8465c0921673c3b15d177230dad7789feb Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 9 Feb 2014 03:29:30 -0800 Subject: [PATCH 7/9] spl: Fix wrong unused flags patch --- spl/PKGBUILD | 2 +- ...inux-3.13-compat-remove-unused-flags.patch | 196 ++++-------------- 2 files changed, 44 insertions(+), 154 deletions(-) diff --git a/spl/PKGBUILD b/spl/PKGBUILD index a5995e6..b427ba6 100644 --- a/spl/PKGBUILD +++ b/spl/PKGBUILD @@ -33,7 +33,7 @@ source=(http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-0.6.2.tar.gz groups=("archzfs") md5sums=('f00535bf89a7fde0e08f44a14a1f1e03' '4d30dbda61995e77c5ca976abb80bad6' - 'ad9a409db6ee851c4ff381beaf4bd33a' + '98081399cdad56e84be109ba68ef9213' 'ad9a409db6ee851c4ff381beaf4bd33a') license=("GPL") install=spl.install diff --git a/spl/linux-3.13-compat-remove-unused-flags.patch b/spl/linux-3.13-compat-remove-unused-flags.patch index 9b5169d..f66d1c4 100644 --- a/spl/linux-3.13-compat-remove-unused-flags.patch +++ b/spl/linux-3.13-compat-remove-unused-flags.patch @@ -1,162 +1,52 @@ -commit 50a0749eba31e821a7edf286f1e3b149f7d13c59 +commit 3e96de17d723d6f6c9e2fd04b059b50d4e0bbef0 Author: Richard Yao -Date: Mon Nov 25 11:22:33 2013 -0500 +Date: Thu Aug 8 04:30:55 2013 -0400 - Linux 3.13 compat: Pass NULL for new delegated inode argument + Linux 3.13 compat: Remove unused flags variable from __cv_init() - 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. + 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 -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); +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; - #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); +- /* 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); From c19acf2dcb231fe1fb4541f76a3b52f83721269c Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 16 Feb 2014 10:44:54 -0800 Subject: [PATCH 8/9] Update to 0.6.2_3.13.3-1 --- conf.sh | 2 +- spl-utils/PKGBUILD | 2 +- spl/PKGBUILD | 6 +++--- zfs-utils/PKGBUILD | 2 +- zfs/PKGBUILD | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/conf.sh b/conf.sh index 4f4580b..9ebf199 100644 --- a/conf.sh +++ b/conf.sh @@ -14,7 +14,7 @@ AZB_LINUX_PKG_VERSION="${AZB_ZOL_VERSION}_${AZB_LINUX_VERSION}" AZB_LINUX_FULL_VERSION="$AZB_LINUX_PKG_VERSION-$AZB_PKGREL" # Testing repo Linux version dependencies -AZB_LINUX_TEST_VERSION="3.13.2" +AZB_LINUX_TEST_VERSION="3.13.3" AZB_LINUX_TEST_X32_PKGREL="1" AZB_LINUX_TEST_X64_PKGREL="1" AZB_LINUX_TEST_X32_VERSION="$AZB_LINUX_TEST_VERSION-$AZB_LINUX_TEST_X32_PKGREL" diff --git a/spl-utils/PKGBUILD b/spl-utils/PKGBUILD index f523912..1a9c591 100644 --- a/spl-utils/PKGBUILD +++ b/spl-utils/PKGBUILD @@ -11,7 +11,7 @@ pkgname="spl-utils" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.13.2 +pkgver=0.6.2_3.13.3 pkgrel=1 pkgdesc="Solaris Porting Layer kernel module support files." arch=("i686" "x86_64") diff --git a/spl/PKGBUILD b/spl/PKGBUILD index b427ba6..f53f893 100644 --- a/spl/PKGBUILD +++ b/spl/PKGBUILD @@ -11,14 +11,14 @@ pkgname="spl" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.13.2 +pkgver=0.6.2_3.13.3 pkgrel=1 # Used incase the i686 and x86_64 linux packages get out of sync with the # PKGREL. This occurred on January 31, 2014 where i686 was versioned at # 3.12.9-1 and x86_64 was versioned at 3.12.9-2. -LINUX_VERSION_X32="3.13.2-1" -LINUX_VERSION_X64="3.13.2-1" +LINUX_VERSION_X32="3.13.3-1" +LINUX_VERSION_X64="3.13.3-1" [[ $CARCH == "i686" ]] && LINUX_VERSION=$LINUX_VERSION_X32 || LINUX_VERSION=$LINUX_VERSION_X64 pkgdesc="Solaris Porting Layer kernel modules." diff --git a/zfs-utils/PKGBUILD b/zfs-utils/PKGBUILD index 38601df..2515dd5 100644 --- a/zfs-utils/PKGBUILD +++ b/zfs-utils/PKGBUILD @@ -11,7 +11,7 @@ pkgname="zfs-utils" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.13.2 +pkgver=0.6.2_3.13.3 pkgrel=1 pkgdesc="Kernel module support files for the Zettabyte File System." depends=("spl") diff --git a/zfs/PKGBUILD b/zfs/PKGBUILD index 12e8aba..d88df82 100644 --- a/zfs/PKGBUILD +++ b/zfs/PKGBUILD @@ -11,18 +11,18 @@ pkgname="zfs" # The build script can be found at # https://github.com/demizer/archzfs/blob/master/build.sh # -pkgver=0.6.2_3.13.2 +pkgver=0.6.2_3.13.3 pkgrel=1 # Used incase the i686 and x86_64 linux packages get out of sync with the # PKGREL. This occurred on January 31, 2014 where i686 was versioned at # 3.12.9-1 and x86_64 was versioned at 3.12.9-2. -LINUX_VERSION_X32="3.13.2-1" -LINUX_VERSION_X64="3.13.2-1" +LINUX_VERSION_X32="3.13.3-1" +LINUX_VERSION_X64="3.13.3-1" [[ $CARCH == "i686" ]] && LINUX_VERSION=$LINUX_VERSION_X32 || LINUX_VERSION=$LINUX_VERSION_X64 pkgdesc="Kernel modules for the Zettabyte File System." -depends=("spl=0.6.2_3.13.2-1" "zfs-utils" "linux=$LINUX_VERSION") +depends=("spl=0.6.2_3.13.3-1" "zfs-utils" "linux=$LINUX_VERSION") makedepends=("linux-headers=$LINUX_VERSION") arch=("i686" "x86_64") url="http://zfsonlinux.org/" From 95e4da35e9fa3d62b0425a370a2a82808cc57d8a Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Sun, 16 Feb 2014 10:58:46 -0800 Subject: [PATCH 9/9] build.sh: Improve support for building for testing --- build.sh | 62 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/build.sh b/build.sh index b45ad23..f6b6e1d 100755 --- a/build.sh +++ b/build.sh @@ -10,6 +10,7 @@ # Defaults, don't edit these. AZB_PKG_LIST="spl-utils spl zfs-utils zfs" AZB_UPDATE_PKGBUILDS="" +AZB_UPDATE_TEST_PKGBUILDS="" AZB_BUILD=0 AZB_CHROOT_UPDATE="" AZB_SIGN="" @@ -38,18 +39,19 @@ usage() { echo echo "Commands:" echo - echo " make Build all packages." - echo " test Build test packages." - echo " update Update all PKGBUILDs using conf.sh variables." - echo " sign GPG detach sign all compiled packages (default)." + echo " make Build all packages." + echo " test Build test packages." + echo " update Update all PKGBUILDs using conf.sh variables." + echo " update-test Update all PKGBUILDs using the testing conf.sh variables." + echo " sign GPG detach sign all compiled packages (default)." echo echo "Examples:" echo - echo " build.sh make -u :: Update the chroot and build all of the packages" - echo " build.sh -C :: Remove all compiled packages" - echo " build.sh update :: Update PKGBUILDS only" - echo " build.sh update make -u :: Update PKGBUILDs, update the chroot, and make all of the packages" - echo " build.sh update test -u :: Update PKGBUILDs (use testing versions), update the chroot, and make all of the packages" + echo " build.sh make -u :: Update the chroot and build all of the packages" + echo " build.sh -C :: Remove all compiled packages" + echo " build.sh update :: Update PKGBUILDS only" + echo " build.sh update make -u :: Update PKGBUILDs, update the chroot, and make all of the packages" + echo " build.sh update-test test -u :: Update PKGBUILDs (use testing versions), update the chroot, and make all of the packages" } sed_escape_input_string() { @@ -66,11 +68,10 @@ build_sources() { } sign_packages() { - if [[ $AZB_BUILD ]]; then - FILES=$(find $PWD -iname "*${AZB_ZOL_VERSION}_${AZB_LINUX_VERSION}-${AZB_PKGREL}*.pkg.tar.xz") - elif [[ $AZB_BUILD_TEST ]]; then - FILES=$(find $PWD -iname "*${AZB_ZOL_VERSION}_${AZB_LINUX_TEST_VERSION}-${AZB_PKGREL}*.pkg.tar.xz") - fi + FILES1=$(find $PWD -iname "*${AZB_LINUX_FULL_VERSION}*.pkg.tar.xz") + FILES2=$(find $PWD -iname "*${AZB_LINUX_TEST_FULL_VERSION}*.pkg.tar.xz") + FILES=$FILES1$FILES2 + debug "Found FILES: ${FILES}" msg "Signing the packages with GPG" for F in $FILES; do msg2 "Signing $F" @@ -79,9 +80,9 @@ sign_packages() { } update_pkgbuilds() { - AZB_CURRENT_PKGVER=$(grep "pkgver=" zfs/PKGBUILD | cut -d= -f2 | cut -d_ -f1) + AZB_CURRENT_PKGVER=$(grep "pkgver=" zfs/PKGBUILD | cut -d= -f2) AZB_CURRENT_PKGREL=$(grep "pkgrel=" zfs/PKGBUILD | cut -d= -f2) - AZB_CURRENT_ZOLVER=$(sed_escape_input_string $AZB_CURRENT_PKGVER) + AZB_CURRENT_ZOLVER=$(sed_escape_input_string $(echo $AZB_CURRENT_PKGVER | cut -d_ -f1)) AZB_CURRENT_SPL_DEPVER=$(grep "spl=" zfs/PKGBUILD | cut -d\" -f2 | cut -d= -f2) AZB_CURRENT_X32_LINUX_VERSION=$(grep "LINUX_VERSION_X32=" zfs/PKGBUILD | cut -d\" -f2) AZB_CURRENT_X64_LINUX_VERSION=$(grep "LINUX_VERSION_X64=" zfs/PKGBUILD | cut -d\" -f2) @@ -96,39 +97,39 @@ update_pkgbuilds() { # Change the top level AZB_PKGREL run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \"s/pkgrel=$AZB_CURRENT_PKGREL/pkgrel=$AZB_PKGREL/g\"" - if [[ $AZB_BUILD ]]; then + if [[ $AZB_UPDATE_PKGBUILDS ]]; then # Change the spl version number in zfs/PKGBUILD - run_cmd "sed -i \"s/$AZB_CURRENT_SPL_DEPVER/$AZB_LINUX_FULL_VERSION/g\" zfs/PKGBUILD" + run_cmd "sed -i \"s/spl=$AZB_CURRENT_SPL_DEPVER/spl=$AZB_LINUX_FULL_VERSION/g\" zfs/PKGBUILD" # Change LINUX_VERSION_XXX run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \ - \"s/LINUX_VERSION_X32=\\\"$AZB_CURRENT_X32_LINUX_VERSION\\\"/LINUX_VERSION_X32=\\\"$AZB_LINUX_X32_VERSION_FULL\\\"/g\"" + \"s/LINUX_VERSION_X32=\\\"$AZB_CURRENT_X32_LINUX_VERSION\\\"/LINUX_VERSION_X32=\\\"$AZB_LINUX_X32_VERSION\\\"/g\"" run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \ - \"s/LINUX_VERSION_X64=\\\"$AZB_CURRENT_X64_LINUX_VERSION\\\"/LINUX_VERSION_X64=\\\"$AZB_LINUX_X64_VERSION_FULL\\\"/g\"" + \"s/LINUX_VERSION_X64=\\\"$AZB_CURRENT_X64_LINUX_VERSION\\\"/LINUX_VERSION_X64=\\\"$AZB_LINUX_X64_VERSION\\\"/g\"" # Replace the ZFS version run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \"s/$AZB_CURRENT_ZOLVER/$AZB_ZOL_VERSION/g\"" # Replace the linux version in the top level PKGVER - run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \"s/_$AZB_CURRENT_PKGVER/_$AZB_LINUX_VERSION/g\"" + run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \"s/pkgver=$AZB_CURRENT_PKGVER/pkgver=$AZB_LINUX_PKG_VERSION/g\"" - elif [[ $AZB_BUILD_TEST ]]; then + elif [[ $AZB_UPDATE_TEST_PKGBUILDS ]]; then # Change the spl version number in zfs/PKGBUILD - run_cmd "sed -i \"s/$AZB_CURRENT_SPL_DEPVER/$AZB_LINUX_TEST_FULL_VERSION/g\" zfs/PKGBUILD" + run_cmd "sed -i \"s/spl=$AZB_CURRENT_SPL_DEPVER/spl=$AZB_LINUX_TEST_FULL_VERSION/g\" zfs/PKGBUILD" # Change LINUX_VERSION_XXX run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \ - \"s/LINUX_VERSION_X32=\\\"$AZB_CURRENT_X32_LINUX_VERSION\\\"/LINUX_VERSION_X32=\\\"$AZB_LINUX_TEST_X32_VERSION_FULL\\\"/g\"" + \"s/LINUX_VERSION_X32=\\\"$AZB_CURRENT_X32_LINUX_VERSION\\\"/LINUX_VERSION_X32=\\\"$AZB_LINUX_TEST_X32_VERSION\\\"/g\"" run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \ - \"s/LINUX_VERSION_X64=\\\"$AZB_CURRENT_X64_LINUX_VERSION\\\"/LINUX_VERSION_X64=\\\"$AZB_LINUX_TEST_X64_VERSION_FULL\\\"/g\"" + \"s/LINUX_VERSION_X64=\\\"$AZB_CURRENT_X64_LINUX_VERSION\\\"/LINUX_VERSION_X64=\\\"$AZB_LINUX_TEST_X64_VERSION\\\"/g\"" # Replace the ZFS version run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \"s/$AZB_CURRENT_ZOLVER/$AZB_ZOL_VERSION/g\"" # Replace the linux version in the top level PKGVER - run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \"s/_$AZB_CURRENT_PKGVER/_$AZB_LINUX_TEST_VERSION/g\"" + run_cmd "find . -iname \"PKGBUILD\" -print | xargs sed -i \"s/pkgver=$AZB_CURRENT_PKGVER/pkgver=$AZB_LINUX_TEST_PKG_VERSION/g\"" fi @@ -151,6 +152,8 @@ for (( a = 0; a < $#; a++ )); do AZB_BUILD_TEST=1 elif [[ ${ARGS[$a]} == "update" ]]; then AZB_UPDATE_PKGBUILDS=1 + elif [[ ${ARGS[$a]} == "update-test" ]]; then + AZB_UPDATE_TEST_PKGBUILDS=1 elif [[ ${ARGS[$a]} == "sign" ]]; then AZB_SIGN=1 elif [[ ${ARGS[$a]} == "-h" ]]; then @@ -169,7 +172,7 @@ done msg "build.sh started..." -if [[ $AZB_UPDATE_PKGBUILDS == 1 ]]; then +if [[ $AZB_UPDATE_PKGBUILDS == 1 || $AZB_UPDATE_TEST_PKGBUILDS == 1 ]]; then update_pkgbuilds fi @@ -186,15 +189,16 @@ if [[ $AZB_BUILD_TEST == 1 ]]; then for PKG in $AZB_PKG_LIST; do msg "Building $PKG..." run_cmd "cd \"$PWD/$PKG\"" - run_cmd "sudo ccm32 t" + # run_cmd "sudo ccm32 t" run_cmd "sudo ccm32 s" - run_cmd "sudo ccm64 t" + # run_cmd "sudo ccm64 t" run_cmd "sudo ccm64 s" run_cmd "cd - > /dev/null" done build_sources sign_packages fi + if [[ $AZB_BUILD == 1 ]]; then if [ -n "$AZB_CHROOT_UPDATE" ]; then msg "Updating the i686 and x86_64 clean chroots..."