diff --git a/build.sh b/build.sh index b9ce643..d3f955c 100755 --- a/build.sh +++ b/build.sh @@ -45,12 +45,6 @@ usage() { 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 "Command options:" - echo - echo " update" - echo - echo " test :: Use testing versions from conf.sh" echo echo "Examples:" echo diff --git a/conf.sh b/conf.sh index 2cc54bd..9ebf199 100644 --- a/conf.sh +++ b/conf.sh @@ -1,21 +1,20 @@ # 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 -AZB_LINUX_TEST_VERSION="3.13.2" +# Testing repo Linux version dependencies +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 89bb522..1a9c591 100644 --- a/spl-utils/PKGBUILD +++ b/spl-utils/PKGBUILD @@ -11,30 +11,30 @@ 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.3 +pkgrel=1 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' - '4d30dbda61995e77c5ca976abb80bad6' '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/PKGBUILD b/spl/PKGBUILD index a070f45..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.12.9 -pkgrel=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.12.9-1" -LINUX_VERSION_X64="3.12.9-2" +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." @@ -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-utils/shrinker_api_fix.patch b/spl/linux-3.12-compat-shrinker-api.patch similarity index 100% rename from spl-utils/shrinker_api_fix.patch rename to spl/linux-3.12-compat-shrinker-api.patch 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..f66d1c4 --- /dev/null +++ b/spl/linux-3.13-compat-remove-unused-flags.patch @@ -0,0 +1,52 @@ +commit 3e96de17d723d6f6c9e2fd04b059b50d4e0bbef0 +Author: Richard Yao +Date: Thu Aug 8 04:30:55 2013 -0400 + + Linux 3.13 compat: Remove unused flags variable from __cv_init() + + 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/module/spl/spl-condvar.c b/module/spl/spl-condvar.c +index 283648a..8236412 100644 +--- a/module/spl/spl-condvar.c ++++ b/module/spl/spl-condvar.c +@@ -36,8 +36,6 @@ + void + __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg) + { +- int flags = KM_SLEEP; +- + SENTRY; + ASSERT(cvp); + ASSERT(name == NULL); +@@ -51,12 +49,6 @@ __cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg) + atomic_set(&cvp->cv_refs, 1); + cvp->cv_mutex = NULL; + +- /* We may be called when there is a non-zero preempt_count or +- * interrupts are disabled is which case we must not sleep. +- */ +- if (current_thread_info()->preempt_count || irqs_disabled()) +- flags = KM_NOSLEEP; +- + SEXIT; + } + EXPORT_SYMBOL(__cv_init); 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 */ diff --git a/zfs-utils/PKGBUILD b/zfs-utils/PKGBUILD index 5cbb842..2515dd5 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.3 +pkgrel=1 pkgdesc="Kernel module support files for the Zettabyte File System." depends=("spl") arch=("i686" "x86_64") @@ -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 081e8a4..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.12.9 -pkgrel=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.12.9-1" -LINUX_VERSION_X64="3.12.9-2" +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.12.9-2" "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/" @@ -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 }