Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=commitdiff;h=25897333a1882a9174692a506c7ba59169a0ec3b
commit 25897333a1882a9174692a506c7ba59169a0ec3b Author: DeX77 <[email protected]> Date: Sat Oct 8 21:38:03 2016 +0200 zfs-0.6.5.8-1-x86_64 * version bump diff --git a/source/base-extra/zfs/FrugalBuild b/source/base-extra/zfs/FrugalBuild index 388fac3..2eb54de 100644 --- a/source/base-extra/zfs/FrugalBuild +++ b/source/base-extra/zfs/FrugalBuild @@ -2,8 +2,8 @@ # Maintainer: James Buren <[email protected]> pkgname=zfs -pkgver=0.6.5.7 -pkgrel=15 +pkgver=0.6.5.8 +pkgrel=1 pkgdesc="ZFS" url="http://zfsonlinux.org" rodepends=("spl>=$pkgver") @@ -12,16 +12,12 @@ groups=('base-extra') archs=('!i686' 'x86_64') up2date="Flasttar $url" backup=(etc/zfs/vdev_id.conf etc/zfs/zed.d/zed.rc) -source=(http://archive.zfsonlinux.org/downloads/zfsonlinux/$pkgname/$pkgname-$pkgver.tar.gz \ - kernel-4.7-compat.patch \ - kernel-4.7-xattr-set.patch \ +source=(https://github.com/zfsonlinux/$pkgname/archive/$pkgname-$pkgver.tar.gz \ fixes.patch ) -sha1sums=('69d7711fc400ac505dc3f7501d93e2833ca374a2' \ - '0d4261d4a34f6f035bdaa357536843403191db6c' \ - 'afcd0c950ae22a8c66084b0c08d97e3ad8ebb666' \ +sha1sums=('96c0b37e1d28fec342f78f33da9694ee81603f68' \ '3bfa05d3bf2e72de3ee1da65a68b5634caa3f562') - +_F_cd_path="$pkgname-$pkgname-$pkgver" Finclude kernel-module Fconfopts+=" --datarootdir=/usr/lib \ diff --git a/source/base-extra/zfs/kernel-4.7-compat.patch b/source/base-extra/zfs/kernel-4.7-compat.patch deleted file mode 100644 index be2f8e8..0000000 --- a/source/base-extra/zfs/kernel-4.7-compat.patch +++ /dev/null @@ -1,600 +0,0 @@ -From 6bc58396a1771f6838c62ca1732c3c50e0e7d60b Mon Sep 17 00:00:00 2001 -From: Chunwei Chen <[email protected]> -Date: Wed, 18 May 2016 13:44:13 -0700 -Subject: [PATCH 1/4] Linux 4.7 compat: handler->get() takes both dentry and - inode - -Signed-off-by: Chunwei Chen <[email protected]> ---- - config/kernel-xattr-handler.m4 | 77 +++++++++++++++++++++++++++--------------- - include/linux/xattr_compat.h | 15 +++++++- - 2 files changed, 64 insertions(+), 28 deletions(-) - -diff --git a/config/kernel-xattr-handler.m4 b/config/kernel-xattr-handler.m4 -index f614287..638557e 100644 ---- config/kernel-xattr-handler.m4 -+++ config/kernel-xattr-handler.m4 -@@ -62,18 +62,17 @@ dnl # Supported xattr handler get() interfaces checked newest to oldest. - dnl # - AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET], [ - dnl # -- dnl # 4.4 API change, -- dnl # The xattr_handler->get() callback was changed to take a -- dnl # attr_handler, and handler_flags argument was removed and -- dnl # should be accessed by handler->flags. -+ dnl # 4.7 API change, -+ dnl # The xattr_handler->get() callback was changed to take both -+ dnl # dentry and inode. - dnl # -- AC_MSG_CHECKING([whether xattr_handler->get() wants xattr_handler]) -+ AC_MSG_CHECKING([whether xattr_handler->get() wants both dentry and inode]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/xattr.h> - - int get(const struct xattr_handler *handler, -- struct dentry *dentry, const char *name, -- void *buffer, size_t size) { return 0; } -+ struct dentry *dentry, struct inode *inode, -+ const char *name, void *buffer, size_t size) { return 0; } - static const struct xattr_handler - xops __attribute__ ((unused)) = { - .get = get, -@@ -81,23 +80,22 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET], [ - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_XATTR_GET_HANDLER, 1, -+ AC_DEFINE(HAVE_XATTR_GET_DENTRY_INODE, 1, - [xattr_handler->get() wants xattr_handler]) - ],[ - dnl # -- dnl # 2.6.33 API change, -- dnl # The xattr_handler->get() callback was changed to take -- dnl # a dentry instead of an inode, and a handler_flags -- dnl # argument was added. -+ dnl # 4.4 API change, -+ dnl # The xattr_handler->get() callback was changed to take a -+ dnl # attr_handler, and handler_flags argument was removed and -+ dnl # should be accessed by handler->flags. - dnl # -- AC_MSG_RESULT(no) -- AC_MSG_CHECKING([whether xattr_handler->get() wants dentry]) -+ AC_MSG_CHECKING([whether xattr_handler->get() wants xattr_handler]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/xattr.h> - -- int get(struct dentry *dentry, const char *name, -- void *buffer, size_t size, int handler_flags) -- { return 0; } -+ int get(const struct xattr_handler *handler, -+ struct dentry *dentry, const char *name, -+ void *buffer, size_t size) { return 0; } - static const struct xattr_handler - xops __attribute__ ((unused)) = { - .get = get, -@@ -105,20 +103,23 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET], [ - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_XATTR_GET_DENTRY, 1, -- [xattr_handler->get() wants dentry]) -+ AC_DEFINE(HAVE_XATTR_GET_HANDLER, 1, -+ [xattr_handler->get() wants xattr_handler]) - ],[ - dnl # -- dnl # 2.6.32 API -+ dnl # 2.6.33 API change, -+ dnl # The xattr_handler->get() callback was changed to take -+ dnl # a dentry instead of an inode, and a handler_flags -+ dnl # argument was added. - dnl # - AC_MSG_RESULT(no) -- AC_MSG_CHECKING( -- [whether xattr_handler->get() wants inode]) -+ AC_MSG_CHECKING([whether xattr_handler->get() wants dentry]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/xattr.h> - -- int get(struct inode *ip, const char *name, -- void *buffer, size_t size) { return 0; } -+ int get(struct dentry *dentry, const char *name, -+ void *buffer, size_t size, int handler_flags) -+ { return 0; } - static const struct xattr_handler - xops __attribute__ ((unused)) = { - .get = get, -@@ -126,10 +127,32 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET], [ - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_XATTR_GET_INODE, 1, -- [xattr_handler->get() wants inode]) -+ AC_DEFINE(HAVE_XATTR_GET_DENTRY, 1, -+ [xattr_handler->get() wants dentry]) - ],[ -- AC_MSG_ERROR([no; please file a bug report]) -+ dnl # -+ dnl # 2.6.32 API -+ dnl # -+ AC_MSG_RESULT(no) -+ AC_MSG_CHECKING( -+ [whether xattr_handler->get() wants inode]) -+ ZFS_LINUX_TRY_COMPILE([ -+ #include <linux/xattr.h> -+ -+ int get(struct inode *ip, const char *name, -+ void *buffer, size_t size) { return 0; } -+ static const struct xattr_handler -+ xops __attribute__ ((unused)) = { -+ .get = get, -+ }; -+ ],[ -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_XATTR_GET_INODE, 1, -+ [xattr_handler->get() wants inode]) -+ ],[ -+ AC_MSG_ERROR([no; please file a bug report]) -+ ]) - ]) - ]) - ]) -diff --git a/include/linux/xattr_compat.h b/include/linux/xattr_compat.h -index 5e19ea1..451b654 100644 ---- include/linux/xattr_compat.h -+++ include/linux/xattr_compat.h -@@ -102,12 +102,25 @@ fn(struct inode *ip, char *list, size_t list_size, \ - #endif - - /* -+ * 4.7 API change, -+ * The xattr_handler->get() callback was changed to take a both dentry and -+ * inode, because the dentry might not be attached to an inode yet. -+ */ -+#if defined(HAVE_XATTR_GET_DENTRY_INODE) -+#define ZPL_XATTR_GET_WRAPPER(fn) \ -+static int \ -+fn(const struct xattr_handler *handler, struct dentry *dentry, \ -+ struct inode *inode, const char *name, void *buffer, size_t size) \ -+{ \ -+ return (__ ## fn(inode, name, buffer, size)); \ -+} -+/* - * 4.4 API change, - * The xattr_handler->get() callback was changed to take a xattr_handler, - * and handler_flags argument was removed and should be accessed by - * handler->flags. - */ --#if defined(HAVE_XATTR_GET_HANDLER) -+#elif defined(HAVE_XATTR_GET_HANDLER) - #define ZPL_XATTR_GET_WRAPPER(fn) \ - static int \ - fn(const struct xattr_handler *handler, struct dentry *dentry, \ - -From 17f60a9b9d98f98740eb3916d43ce9eebca030c6 Mon Sep 17 00:00:00 2001 -From: Chunwei Chen <[email protected]> -Date: Wed, 18 May 2016 13:45:39 -0700 -Subject: [PATCH 2/4] Linux 4.7 compat: replace blk_queue_flush with - blk_queue_write_cache - -Signed-off-by: Chunwei Chen <[email protected]> ---- - config/kernel-blk-queue-flush.m4 | 55 ++++++++++++++++++++++++++++++++++------ - include/linux/blkdev_compat.h | 27 ++++++++++++++++++++ - module/zfs/zvol.c | 4 ++- - 3 files changed, 77 insertions(+), 9 deletions(-) - -diff --git a/config/kernel-blk-queue-flush.m4 b/config/kernel-blk-queue-flush.m4 -index bb74ea1..1baab83 100644 ---- config/kernel-blk-queue-flush.m4 -+++ config/kernel-blk-queue-flush.m4 -@@ -22,25 +22,64 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_FLUSH], [ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_BLK_QUEUE_FLUSH, 1, - [blk_queue_flush() is available]) -+ -+ AC_MSG_CHECKING([whether blk_queue_flush() is GPL-only]) -+ ZFS_LINUX_TRY_COMPILE([ -+ #include <linux/module.h> -+ #include <linux/blkdev.h> -+ -+ MODULE_LICENSE("$ZFS_META_LICENSE"); -+ ],[ -+ struct request_queue *q = NULL; -+ (void) blk_queue_flush(q, REQ_FLUSH); -+ ],[ -+ AC_MSG_RESULT(no) -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_BLK_QUEUE_FLUSH_GPL_ONLY, 1, -+ [blk_queue_flush() is GPL-only]) -+ ]) - ],[ - AC_MSG_RESULT(no) - ]) - -- AC_MSG_CHECKING([whether blk_queue_flush() is GPL-only]) -+ dnl # -+ dnl # 4.7 API change -+ dnl # Replace blk_queue_flush with blk_queue_write_cache -+ dnl # -+ AC_MSG_CHECKING([whether blk_queue_write_cache() exists]) - ZFS_LINUX_TRY_COMPILE([ -- #include <linux/module.h> -+ #include <linux/kernel.h> - #include <linux/blkdev.h> - -- MODULE_LICENSE("$ZFS_META_LICENSE"); - ],[ - struct request_queue *q = NULL; -- (void) blk_queue_flush(q, REQ_FLUSH); -- ],[ -- AC_MSG_RESULT(no) -+ blk_queue_write_cache(q, true, true); - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_BLK_QUEUE_FLUSH_GPL_ONLY, 1, -- [blk_queue_flush() is GPL-only]) -+ AC_DEFINE(HAVE_BLK_QUEUE_WRITE_CACHE, 1, -+ [blk_queue_write_cache() exists]) -+ -+ AC_MSG_CHECKING([whether blk_queue_write_cache() is GPL-only]) -+ ZFS_LINUX_TRY_COMPILE([ -+ #include <linux/kernel.h> -+ #include <linux/module.h> -+ #include <linux/blkdev.h> -+ -+ MODULE_LICENSE("$ZFS_META_LICENSE"); -+ ],[ -+ struct request_queue *q = NULL; -+ blk_queue_write_cache(q, true, true); -+ ],[ -+ AC_MSG_RESULT(no) -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_BLK_QUEUE_WRITE_CACHE_GPL_ONLY, 1, -+ [blk_queue_write_cache() is GPL-only]) -+ ]) -+ ],[ -+ AC_MSG_RESULT(no) - ]) -+ - EXTRA_KCFLAGS="$tmp_flags" - ]) -diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h -index 0cb0720..42b474b 100644 ---- include/linux/blkdev_compat.h -+++ include/linux/blkdev_compat.h -@@ -52,6 +52,33 @@ __blk_queue_flush(struct request_queue *q, unsigned int flags) - q->flush_flags = flags & (REQ_FLUSH | REQ_FUA); - } - #endif /* HAVE_BLK_QUEUE_FLUSH && HAVE_BLK_QUEUE_FLUSH_GPL_ONLY */ -+ -+/* -+ * 4.7 API change, -+ * The blk_queue_write_cache() interface has replaced blk_queue_flush() -+ * interface. However, while the new interface is GPL-only. Thus if the -+ * GPL-only version is detected we implement our own trivial helper -+ * compatibility funcion. -+ */ -+#if defined(HAVE_BLK_QUEUE_WRITE_CACHE) && \ -+ defined(HAVE_BLK_QUEUE_WRITE_CACHE_GPL_ONLY) -+#define blk_queue_write_cache __blk_queue_write_cache -+static inline void -+__blk_queue_write_cache(struct request_queue *q, bool wc, bool fua) -+{ -+ spin_lock_irq(q->queue_lock); -+ if (wc) -+ queue_flag_set(QUEUE_FLAG_WC, q); -+ else -+ queue_flag_clear(QUEUE_FLAG_WC, q); -+ if (fua) -+ queue_flag_set(QUEUE_FLAG_FUA, q); -+ else -+ queue_flag_clear(QUEUE_FLAG_FUA, q); -+ spin_unlock_irq(q->queue_lock); -+} -+#endif -+ - /* - * Most of the blk_* macros were removed in 2.6.36. Ostensibly this was - * done to improve readability and allow easier grepping. However, from -diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c -index be6aea8..9c89493 100644 ---- module/zfs/zvol.c -+++ module/zfs/zvol.c -@@ -1291,7 +1291,9 @@ zvol_alloc(dev_t dev, const char *name) - - blk_queue_make_request(zv->zv_queue, zvol_request); - --#ifdef HAVE_BLK_QUEUE_FLUSH -+#ifdef HAVE_BLK_QUEUE_WRITE_CACHE -+ blk_queue_write_cache(zv->zv_queue, B_TRUE, B_TRUE); -+#elif defined(HAVE_BLK_QUEUE_FLUSH) - blk_queue_flush(zv->zv_queue, VDEV_REQ_FLUSH | VDEV_REQ_FUA); - #else - blk_queue_ordered(zv->zv_queue, QUEUE_ORDERED_DRAIN, NULL); - -From bb7da7684f53193dec28d40bc51ae8af38924017 Mon Sep 17 00:00:00 2001 -From: Chunwei Chen <[email protected]> -Date: Wed, 18 May 2016 13:48:08 -0700 -Subject: [PATCH 3/4] Fix config for posix_acl_release() GPL test - -The GPL test for posix_acl_release() didn't include <linux/module.h>. Also run -this test only when posix_acl_release() exists. - -Signed-off-by: Chunwei Chen <[email protected]> ---- - config/kernel-acl.m4 | 33 +++++++++++++++++---------------- - 1 file changed, 17 insertions(+), 16 deletions(-) - -diff --git a/config/kernel-acl.m4 b/config/kernel-acl.m4 -index 1cb28b2..ffb6a02 100644 ---- config/kernel-acl.m4 -+++ config/kernel-acl.m4 -@@ -16,26 +16,27 @@ AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_RELEASE], [ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_POSIX_ACL_RELEASE, 1, - [posix_acl_release() is available]) -- ],[ -- AC_MSG_RESULT(no) -- ]) - -- AC_MSG_CHECKING([whether posix_acl_release() is GPL-only]) -- ZFS_LINUX_TRY_COMPILE([ -- #include <linux/cred.h> -- #include <linux/fs.h> -- #include <linux/posix_acl.h> -+ AC_MSG_CHECKING([whether posix_acl_release() is GPL-only]) -+ ZFS_LINUX_TRY_COMPILE([ -+ #include <linux/module.h> -+ #include <linux/cred.h> -+ #include <linux/fs.h> -+ #include <linux/posix_acl.h> - -- MODULE_LICENSE("$ZFS_META_LICENSE"); -- ],[ -- struct posix_acl* tmp = posix_acl_alloc(1, 0); -- posix_acl_release(tmp); -+ MODULE_LICENSE("$ZFS_META_LICENSE"); -+ ],[ -+ struct posix_acl* tmp = posix_acl_alloc(1, 0); -+ posix_acl_release(tmp); -+ ],[ -+ AC_MSG_RESULT(no) -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_POSIX_ACL_RELEASE_GPL_ONLY, 1, -+ [posix_acl_release() is GPL-only]) -+ ]) - ],[ - AC_MSG_RESULT(no) -- ],[ -- AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_POSIX_ACL_RELEASE_GPL_ONLY, 1, -- [posix_acl_release() is GPL-only]) - ]) - ]) - - -From 82cbe8d7b37040e791295d6d1ff620bd2e9f69cb Mon Sep 17 00:00:00 2001 -From: Chunwei Chen <[email protected]> -Date: Wed, 18 May 2016 14:30:20 -0700 -Subject: [PATCH 4/4] Linux 4.7 compat: use iterate_shared for concurrent - readdir - -Register iterate_shared if it exists so the kernel will used shared lock and -allowing concurrent readdir. - -Also, use shared lock when doing llseek with SEEK_DATA or SEEK_HOLE to allow -concurrent seeking. - -Signed-off-by: Chunwei Chen <[email protected]> -Requires-spl:refs/pull/549/head ---- - config/kernel-vfs-iterate.m4 | 49 +++++++++++++++++++++++++++++++------------- - include/sys/zpl.h | 2 +- - module/zfs/zpl_ctldir.c | 18 ++++++++++------ - module/zfs/zpl_file.c | 10 +++++---- - 4 files changed, 54 insertions(+), 25 deletions(-) - -diff --git a/config/kernel-vfs-iterate.m4 b/config/kernel-vfs-iterate.m4 -index c2c6562..7b1599e 100644 ---- config/kernel-vfs-iterate.m4 -+++ config/kernel-vfs-iterate.m4 -@@ -1,8 +1,8 @@ --dnl # --dnl # 3.11 API change --dnl # - AC_DEFUN([ZFS_AC_KERNEL_VFS_ITERATE], [ -- AC_MSG_CHECKING([whether fops->iterate() is available]) -+ dnl # -+ dnl # 4.7 API change -+ dnl # -+ AC_MSG_CHECKING([whether fops->iterate_shared() is available]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/fs.h> - int iterate(struct file *filp, struct dir_context * context) -@@ -10,34 +10,55 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_ITERATE], [ - - static const struct file_operations fops - __attribute__ ((unused)) = { -- .iterate = iterate, -+ .iterate_shared = iterate, - }; - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_VFS_ITERATE, 1, -- [fops->iterate() is available]) -+ AC_DEFINE(HAVE_VFS_ITERATE_SHARED, 1, -+ [fops->iterate_shared() is available]) - ],[ - AC_MSG_RESULT(no) - -- AC_MSG_CHECKING([whether fops->readdir() is available]) -+ dnl # -+ dnl # 3.11 API change -+ dnl # -+ AC_MSG_CHECKING([whether fops->iterate() is available]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/fs.h> -- int readdir(struct file *filp, void *entry, filldir_t func) -+ int iterate(struct file *filp, struct dir_context * context) - { return 0; } - - static const struct file_operations fops - __attribute__ ((unused)) = { -- .readdir = readdir, -+ .iterate = iterate, - }; - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_VFS_READDIR, 1, -- [fops->readdir() is available]) -+ AC_DEFINE(HAVE_VFS_ITERATE, 1, -+ [fops->iterate() is available]) - ],[ -- AC_MSG_ERROR(no; file a bug report with ZFSOnLinux) -- ]) -+ AC_MSG_RESULT(no) -+ -+ AC_MSG_CHECKING([whether fops->readdir() is available]) -+ ZFS_LINUX_TRY_COMPILE([ -+ #include <linux/fs.h> -+ int readdir(struct file *filp, void *entry, filldir_t func) -+ { return 0; } - -+ static const struct file_operations fops -+ __attribute__ ((unused)) = { -+ .readdir = readdir, -+ }; -+ ],[ -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_VFS_READDIR, 1, -+ [fops->readdir() is available]) -+ ],[ -+ AC_MSG_ERROR(no; file a bug report with ZFSOnLinux) -+ ]) -+ ]) - ]) - ]) -diff --git a/include/sys/zpl.h b/include/sys/zpl.h -index 54b35e0..c608548 100644 ---- include/sys/zpl.h -+++ include/sys/zpl.h -@@ -123,7 +123,7 @@ extern const struct inode_operations zpl_ops_snapdirs; - extern const struct file_operations zpl_fops_shares; - extern const struct inode_operations zpl_ops_shares; - --#ifdef HAVE_VFS_ITERATE -+#if defined(HAVE_VFS_ITERATE) || defined(HAVE_VFS_ITERATE_SHARED) - - #define DIR_CONTEXT_INIT(_dirent, _actor, _pos) { \ - .actor = _actor, \ -diff --git a/module/zfs/zpl_ctldir.c b/module/zfs/zpl_ctldir.c -index dd02e9e..069834e 100644 ---- module/zfs/zpl_ctldir.c -+++ module/zfs/zpl_ctldir.c -@@ -81,7 +81,7 @@ zpl_root_iterate(struct file *filp, struct dir_context *ctx) - return (error); - } - --#if !defined(HAVE_VFS_ITERATE) -+#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) - static int - zpl_root_readdir(struct file *filp, void *dirent, filldir_t filldir) - { -@@ -144,7 +144,9 @@ const struct file_operations zpl_fops_root = { - .open = zpl_common_open, - .llseek = generic_file_llseek, - .read = generic_read_dir, --#ifdef HAVE_VFS_ITERATE -+#ifdef HAVE_VFS_ITERATE_SHARED -+ .iterate_shared = zpl_root_iterate, -+#elif defined(HAVE_VFS_ITERATE) - .iterate = zpl_root_iterate, - #else - .readdir = zpl_root_readdir, -@@ -285,7 +287,7 @@ zpl_snapdir_iterate(struct file *filp, struct dir_context *ctx) - return (error); - } - --#if !defined(HAVE_VFS_ITERATE) -+#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) - static int - zpl_snapdir_readdir(struct file *filp, void *dirent, filldir_t filldir) - { -@@ -385,7 +387,9 @@ const struct file_operations zpl_fops_snapdir = { - .open = zpl_common_open, - .llseek = generic_file_llseek, - .read = generic_read_dir, --#ifdef HAVE_VFS_ITERATE -+#ifdef HAVE_VFS_ITERATE_SHARED -+ .iterate_shared = zpl_snapdir_iterate, -+#elif defined(HAVE_VFS_ITERATE) - .iterate = zpl_snapdir_iterate, - #else - .readdir = zpl_snapdir_readdir, -@@ -472,7 +476,7 @@ zpl_shares_iterate(struct file *filp, struct dir_context *ctx) - return (error); - } - --#if !defined(HAVE_VFS_ITERATE) -+#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) - static int - zpl_shares_readdir(struct file *filp, void *dirent, filldir_t filldir) - { -@@ -525,7 +529,9 @@ const struct file_operations zpl_fops_shares = { - .open = zpl_common_open, - .llseek = generic_file_llseek, - .read = generic_read_dir, --#ifdef HAVE_VFS_ITERATE -+#ifdef HAVE_VFS_ITERATE_SHARED -+ .iterate_shared = zpl_shares_iterate, -+#elif defined(HAVE_VFS_ITERATE) - .iterate = zpl_shares_iterate, - #else - .readdir = zpl_shares_readdir, -diff --git a/module/zfs/zpl_file.c b/module/zfs/zpl_file.c -index 36153cb..4481237 100644 ---- module/zfs/zpl_file.c -+++ module/zfs/zpl_file.c -@@ -93,7 +93,7 @@ zpl_iterate(struct file *filp, struct dir_context *ctx) - return (error); - } - --#if !defined(HAVE_VFS_ITERATE) -+#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) - static int - zpl_readdir(struct file *filp, void *dirent, filldir_t filldir) - { -@@ -421,13 +421,13 @@ zpl_llseek(struct file *filp, loff_t offset, int whence) - loff_t maxbytes = ip->i_sb->s_maxbytes; - loff_t error; - -- spl_inode_lock(ip); -+ spl_inode_lock_shared(ip); - cookie = spl_fstrans_mark(); - error = -zfs_holey(ip, whence, &offset); - spl_fstrans_unmark(cookie); - if (error == 0) - error = lseek_execute(filp, ip, offset, maxbytes); -- spl_inode_unlock(ip); -+ spl_inode_unlock_shared(ip); - - return (error); - } -@@ -853,7 +853,9 @@ const struct file_operations zpl_file_operations = { - const struct file_operations zpl_dir_file_operations = { - .llseek = generic_file_llseek, - .read = generic_read_dir, --#ifdef HAVE_VFS_ITERATE -+#ifdef HAVE_VFS_ITERATE_SHARED -+ .iterate_shared = zpl_iterate, -+#elif defined(HAVE_VFS_ITERATE) - .iterate = zpl_iterate, - #else - .readdir = zpl_readdir, diff --git a/source/base-extra/zfs/kernel-4.7-xattr-set.patch b/source/base-extra/zfs/kernel-4.7-xattr-set.patch deleted file mode 100644 index 2b32d74..0000000 --- a/source/base-extra/zfs/kernel-4.7-xattr-set.patch +++ /dev/null @@ -1,191 +0,0 @@ -From 8fbbc6b4cf13f73d517ec4e826a7069a958fa5ba Mon Sep 17 00:00:00 2001 -From: Brian Behlendorf <[email protected]> -Date: Wed, 1 Jun 2016 18:10:06 -0700 -Subject: [PATCH] Linux 4.7 compat: handler->set() takes both dentry and inode - -Counterpart to fd4c7b7, the same approach was taken to resolve -the compatibility issue. - -Signed-off-by: Brian Behlendorf <[email protected]> -Signed-off-by: Chunwei Chen <[email protected]> -Closes #4717 -Issue #4665 ---- - config/kernel-xattr-handler.m4 | 83 +++++++++++++++++++++++++++--------------- - include/linux/xattr_compat.h | 16 +++++++- - 2 files changed, 69 insertions(+), 30 deletions(-) - -diff --git a/config/kernel-xattr-handler.m4 b/config/kernel-xattr-handler.m4 -index 638557e..dcffd44 100644 ---- a/config/kernel-xattr-handler.m4 -+++ b/config/kernel-xattr-handler.m4 -@@ -81,7 +81,7 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET], [ - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_XATTR_GET_DENTRY_INODE, 1, -- [xattr_handler->get() wants xattr_handler]) -+ [xattr_handler->get() wants both dentry and inode]) - ],[ - dnl # - dnl # 4.4 API change, -@@ -163,18 +163,18 @@ dnl # Supported xattr handler set() interfaces checked newest to oldest. - dnl # - AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [ - dnl # -- dnl # 4.4 API change, -- dnl # The xattr_handler->set() callback was changed to take a -- dnl # xattr_handler, and handler_flags argument was removed and -- dnl # should be accessed by handler->flags. -+ dnl # 4.7 API change, -+ dnl # The xattr_handler->set() callback was changed to take both -+ dnl # dentry and inode. - dnl # -- AC_MSG_CHECKING([whether xattr_handler->set() wants xattr_handler]) -+ AC_MSG_CHECKING([whether xattr_handler->set() wants both dentry and inode]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/xattr.h> - - int set(const struct xattr_handler *handler, -- struct dentry *dentry, const char *name, -- const void *buffer, size_t size, int flags) -+ struct dentry *dentry, struct inode *inode, -+ const char *name, const void *buffer, -+ size_t size, int flags) - { return 0; } - static const struct xattr_handler - xops __attribute__ ((unused)) = { -@@ -183,23 +183,23 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [ - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_XATTR_SET_HANDLER, 1, -- [xattr_handler->set() wants xattr_handler]) -+ AC_DEFINE(HAVE_XATTR_SET_DENTRY_INODE, 1, -+ [xattr_handler->set() wants both dentry and inode]) - ],[ - dnl # -- dnl # 2.6.33 API change, -+ dnl # 4.4 API change, - dnl # The xattr_handler->set() callback was changed to take a -- dnl # dentry instead of an inode, and a handler_flags -- dnl # argument was added. -+ dnl # xattr_handler, and handler_flags argument was removed and -+ dnl # should be accessed by handler->flags. - dnl # -- AC_MSG_RESULT(no) -- AC_MSG_CHECKING([whether xattr_handler->set() wants dentry]) -+ AC_MSG_CHECKING([whether xattr_handler->set() wants xattr_handler]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/xattr.h> - -- int set(struct dentry *dentry, const char *name, -- const void *buffer, size_t size, int flags, -- int handler_flags) { return 0; } -+ int set(const struct xattr_handler *handler, -+ struct dentry *dentry, const char *name, -+ const void *buffer, size_t size, int flags) -+ { return 0; } - static const struct xattr_handler - xops __attribute__ ((unused)) = { - .set = set, -@@ -207,21 +207,23 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [ - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_XATTR_SET_DENTRY, 1, -- [xattr_handler->set() wants dentry]) -+ AC_DEFINE(HAVE_XATTR_SET_HANDLER, 1, -+ [xattr_handler->set() wants xattr_handler]) - ],[ - dnl # -- dnl # 2.6.32 API -+ dnl # 2.6.33 API change, -+ dnl # The xattr_handler->set() callback was changed to take a -+ dnl # dentry instead of an inode, and a handler_flags -+ dnl # argument was added. - dnl # - AC_MSG_RESULT(no) -- AC_MSG_CHECKING( -- [whether xattr_handler->set() wants inode]) -+ AC_MSG_CHECKING([whether xattr_handler->set() wants dentry]) - ZFS_LINUX_TRY_COMPILE([ - #include <linux/xattr.h> - -- int set(struct inode *ip, const char *name, -- const void *buffer, size_t size, int flags) -- { return 0; } -+ int set(struct dentry *dentry, const char *name, -+ const void *buffer, size_t size, int flags, -+ int handler_flags) { return 0; } - static const struct xattr_handler - xops __attribute__ ((unused)) = { - .set = set, -@@ -229,10 +231,33 @@ AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [ - ],[ - ],[ - AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_XATTR_SET_INODE, 1, -- [xattr_handler->set() wants inode]) -+ AC_DEFINE(HAVE_XATTR_SET_DENTRY, 1, -+ [xattr_handler->set() wants dentry]) - ],[ -- AC_MSG_ERROR([no; please file a bug report]) -+ dnl # -+ dnl # 2.6.32 API -+ dnl # -+ AC_MSG_RESULT(no) -+ AC_MSG_CHECKING( -+ [whether xattr_handler->set() wants inode]) -+ ZFS_LINUX_TRY_COMPILE([ -+ #include <linux/xattr.h> -+ -+ int set(struct inode *ip, const char *name, -+ const void *buffer, size_t size, int flags) -+ { return 0; } -+ static const struct xattr_handler -+ xops __attribute__ ((unused)) = { -+ .set = set, -+ }; -+ ],[ -+ ],[ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_XATTR_SET_INODE, 1, -+ [xattr_handler->set() wants inode]) -+ ],[ -+ AC_MSG_ERROR([no; please file a bug report]) -+ ]) - ]) - ]) - ]) -diff --git a/include/linux/xattr_compat.h b/include/linux/xattr_compat.h -index 451b654..b1c4293 100644 ---- a/include/linux/xattr_compat.h -+++ b/include/linux/xattr_compat.h -@@ -154,12 +154,26 @@ fn(struct inode *ip, const char *name, void *buffer, size_t size) \ - #endif - - /* -+ * 4.7 API change, -+ * The xattr_handler->set() callback was changed to take a both dentry and -+ * inode, because the dentry might not be attached to an inode yet. -+ */ -+#if defined(HAVE_XATTR_SET_DENTRY_INODE) -+#define ZPL_XATTR_SET_WRAPPER(fn) \ -+static int \ -+fn(const struct xattr_handler *handler, struct dentry *dentry, \ -+ struct inode *inode, const char *name, const void *buffer, \ -+ size_t size, int flags) \ -+{ \ -+ return (__ ## fn(inode, name, buffer, size, flags)); \ -+} -+/* - * 4.4 API change, - * The xattr_handler->set() callback was changed to take a xattr_handler, - * and handler_flags argument was removed and should be accessed by - * handler->flags. - */ --#if defined(HAVE_XATTR_SET_HANDLER) -+#elif defined(HAVE_XATTR_SET_HANDLER) - #define ZPL_XATTR_SET_WRAPPER(fn) \ - static int \ - fn(const struct xattr_handler *handler, struct dentry *dentry, \ _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
