]> git.proxmox.com Git - pve-kernel.git/commitdiff
update ZFS/SPL to 0.7.2
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Thu, 12 Oct 2017 12:56:28 +0000 (14:56 +0200)
committerFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 13 Oct 2017 09:33:03 +0000 (11:33 +0200)
and switch submodule to simplify patch handling

.gitmodules
Makefile
patches/spl/0001-4.13-compat.patch [deleted file]
patches/zfs/0001-4.13-compat.patch [deleted file]
submodules/spl-module [deleted submodule]
submodules/zfs-module [deleted submodule]
submodules/zfsonlinux [new submodule]

index 5535d6a31e5de59f3efc8a663662ec3d3eac813b..f6049501993a0ca4076831d784ac4941b707766b 100644 (file)
@@ -1,9 +1,6 @@
-[submodule "submodules/zfs-module"]
-       path = submodules/zfs-module
-       url = ../mirror_zfs-debian
-[submodule "submodules/spl-module"]
-       path = submodules/spl-module
-       url = ../mirror_spl-debian
 [submodule "submodules/ubuntu-artful"]
        path = submodules/ubuntu-artful
        url = ../mirror_ubuntu-artful-kernel
+[submodule "submodules/zfsonlinux"]
+       path = submodules/zfsonlinux
+       url = ../zfsonlinux
index becaecfda8d91a8240643ee2752e6027a6fd6ec8..3a219376a27ff730f591ca45a622886e8ee50bd6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -44,12 +44,13 @@ IGBSRC=${IGBDIR}.tar.gz
 IXGBEDIR=ixgbe-5.2.3
 IXGBESRC=${IXGBEDIR}.tar.gz
 
+ZFSONLINUX_SUBMODULE=submodules/zfsonlinux
 SPLDIR=pkg-spl
-SPLSRC=submodules/spl-module
+SPLSRC=${ZFSONLINUX_SUBMODULE}/spl-debian
 ZFSDIR=pkg-zfs
-ZFSSRC=submodules/zfs-module
+ZFSSRC=${ZFSONLINUX_SUBMODULE}/zfs-debian
 ZFS_KO=zfs.ko
-ZFS_KO_REST=zavl.ko znvpair.ko zunicode.ko zcommon.ko zpios.ko
+ZFS_KO_REST=zavl.ko znvpair.ko zunicode.ko zcommon.ko zpios.ko icp.ko
 ZFS_MODULES=$(ZFS_KO) $(ZFS_KO_REST)
 SPL_KO=spl.ko
 SPL_KO_REST=splat.ko
@@ -271,7 +272,7 @@ $(SPL_KO): .compile_mark ${SPLSRC}
        rm -rf ${SPLDIR}
        rsync -ra ${SPLSRC}/ ${SPLDIR}
        [ ! -e /lib/modules/${KVNAME}/build ] || (echo "please remove /lib/modules/${KVNAME}/build" && false)
-       cd ${SPLDIR}; patch -p1 < ../patches/spl/0001-4.13-compat.patch
+       cd ${SPLDIR}; for patch in ../${SPLSRC}/../spl-patches/*.patch; do patch --verbose -p1 < $${patch}; done
        cd ${SPLDIR}; ./autogen.sh
        cd ${SPLDIR}; ./configure --with-config=kernel --with-linux=${TOP}/${KERNEL_SRC} --with-linux-obj=${TOP}/${KERNEL_SRC}
        cd ${SPLDIR}; make
@@ -283,7 +284,7 @@ $(ZFS_KO): .compile_mark ${ZFSSRC}
        rm -rf ${ZFSDIR}
        rsync -ra ${ZFSSRC}/ ${ZFSDIR}
        [ ! -e /lib/modules/${KVNAME}/build ] || (echo "please remove /lib/modules/${KVNAME}/build" && false)
-       cd ${ZFSDIR}; patch -p1 < ../patches/zfs/0001-4.13-compat.patch
+       cd ${ZFSDIR}; for patch in ../${ZFSSRC}/../zfs-patches/*.patch; do patch --verbose -p1 < $${patch}; done
        cd ${ZFSDIR}; ./autogen.sh
        cd ${ZFSDIR}; ./configure --with-spl=${TOP}/${SPLDIR} --with-spl-obj=${TOP}/${SPLDIR} --with-config=kernel --with-linux=${TOP}/${KERNEL_SRC} --with-linux-obj=${TOP}/${KERNEL_SRC}
        cd ${ZFSDIR}; make
@@ -293,6 +294,7 @@ $(ZFS_KO): .compile_mark ${ZFSSRC}
        cp ${ZFSDIR}/module/unicode/zunicode.ko zunicode.ko
        cp ${ZFSDIR}/module/zcommon/zcommon.ko zcommon.ko
        cp ${ZFSDIR}/module/zpios/zpios.ko zpios.ko
+       cp ${ZFSDIR}/module/icp/icp.ko icp.ko
 
 headers_tmp := $(CURDIR)/tmp-headers
 headers_dir := $(headers_tmp)/usr/src/linux-headers-${KVNAME}
@@ -336,13 +338,15 @@ distclean: clean
 .PHONY: update_modules
 update_modules: submodule
        git submodule foreach 'git pull --ff-only origin master'
+       cd ${ZFSSRC}; git pull --ff-only origin master
+       cd ${SPLSRC}; git pull --ff-only origin master
 
 # make sure submodules were initialized
 .PHONY: submodule
 submodule:
-       test -f "${KERNEL_SRC_SUBMODULE}/README" || git submodule update --init
-       test -f "${ZFSSRC}/debian/changelog" || git submodule update --init
-       test -f "${SPLSRC}/debian/changelog" || git submodule update --init
+       test -f "${KERNEL_SRC_SUBMODULE}/README" || git submodule update --init ${KERNEL_SRC_SUBMODULE}
+       test -f "${ZFSONLINUX_SUBMODULE}/Makefile" || git submodule update --init ${ZFSONLINUX_SUBMODULE}
+       (test -f "${ZFSSRC}/debian/changelog" && test -f "${SPLZRC}/debian/changelog") || (cd ${ZFSONLINUX_SUBMODULE}; git submodule update --init)
 
 
 .PHONY: clean
diff --git a/patches/spl/0001-4.13-compat.patch b/patches/spl/0001-4.13-compat.patch
deleted file mode 100644 (file)
index eca1464..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-From 307e735e4cc6806f476deb983d6ffa42dcb69f1c Mon Sep 17 00:00:00 2001
-From: Colin Ian King <colin.king@canonical.com>
-Date: Wed, 9 Aug 2017 17:16:31 +0100
-Subject: [PATCH] UBUNTU: SAUCE: (noup) Update spl to 0.6.5.11-ubuntu1, zfs to
- 0.6.5.11-1ubuntu3
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This includes backports of upstream 4.13 compat fixes from ZFS and SPL
-
-SPL:
-  120faefed90a ("Update struct member intializers to C89")
-  944117514d2a ("Linux 4.13 compat: wait queues")
-
-ZFS:
-  36ba27e9e07b ("Linux 4.13 compat: bio->bi_status and blk_status_t")
-
-Signed-off-by: Colin Ian King <colin.king@canonical.com>
-Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
-
-ported SPL parts for spl-module submodule
-
-Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
----
- include/linux/wait_compat.h |   9 ++
- include/sys/condvar.h       |   6 +-
- include/sys/kmem_cache.h    |   2 +-
- include/sys/taskq.h         |   7 +-
- spl_config.h.in             |   6 +
- module/spl/spl-proc.c       |  10 +-
- module/splat/splat-atomic.c |   3 +-
- module/splat/splat-kmem.c   |   4 +-
- module/splat/splat-rwlock.c |   2 +-
- module/splat/splat-thread.c |   3 +-
- config/spl-build.m4         |  55 +++++++++
- configure                   | 264 ++++++++++++++++++++++++++++++++++++++++
- 12 files changed, 354 insertions(+), 17 deletions(-)
-
-diff --git a/include/linux/wait_compat.h b/include/linux/wait_compat.h
-index d8cd09b9eb08..445a73c68fa1 100644
---- a/include/linux/wait_compat.h
-+++ b/include/linux/wait_compat.h
-@@ -26,6 +26,7 @@
- #define _SPL_WAIT_COMPAT_H
- #include <linux/sched.h>
-+#include <linux/wait.h>
- #ifndef HAVE_WAIT_ON_BIT_ACTION
- #  define spl_wait_on_bit(word, bit, mode) wait_on_bit(word, bit, mode)
-@@ -43,4 +44,12 @@ spl_bit_wait(void *word)
- #endif /* HAVE_WAIT_ON_BIT_ACTION */
-+#ifdef HAVE_WAIT_QUEUE_ENTRY_T
-+typedef wait_queue_head_t     spl_wait_queue_head_t;
-+typedef wait_queue_entry_t    spl_wait_queue_entry_t;
-+#else
-+typedef wait_queue_head_t     spl_wait_queue_head_t;
-+typedef wait_queue_t          spl_wait_queue_entry_t;
-+#endif
-+
- #endif /* SPL_WAIT_COMPAT_H */
-diff --git a/include/sys/condvar.h b/include/sys/condvar.h
-index efcf0dda2769..8a4aab44b5ab 100644
---- a/include/sys/condvar.h
-+++ b/include/sys/condvar.h
-@@ -26,7 +26,7 @@
- #define       _SPL_CONDVAR_H
- #include <linux/module.h>
--#include <linux/wait.h>
-+#include <linux/wait_compat.h>
- #include <linux/delay_compat.h>
- #include <sys/kmem.h>
- #include <sys/mutex.h>
-@@ -41,8 +41,8 @@
- typedef struct {
-       int cv_magic;
--      wait_queue_head_t cv_event;
--      wait_queue_head_t cv_destroy;
-+      spl_wait_queue_head_t cv_event;
-+      spl_wait_queue_head_t cv_destroy;
-       atomic_t cv_refs;
-       atomic_t cv_waiters;
-       kmutex_t *cv_mutex;
-diff --git a/include/sys/kmem_cache.h b/include/sys/kmem_cache.h
-index e971c2b0d952..8fa14f67e73f 100644
---- a/include/sys/kmem_cache.h
-+++ b/include/sys/kmem_cache.h
-@@ -193,7 +193,7 @@ typedef struct spl_kmem_cache {
-       struct list_head        skc_partial_list;  /* Partially alloc'ed */
-       struct rb_root          skc_emergency_tree; /* Min sized objects */
-       spinlock_t              skc_lock;       /* Cache lock */
--      wait_queue_head_t       skc_waitq;      /* Allocation waiters */
-+      spl_wait_queue_head_t   skc_waitq;      /* Allocation waiters */
-       uint64_t                skc_slab_fail;  /* Slab alloc failures */
-       uint64_t                skc_slab_create;  /* Slab creates */
-       uint64_t                skc_slab_destroy; /* Slab destroys */
-diff --git a/include/sys/taskq.h b/include/sys/taskq.h
-index a43a86da6514..fa4b2703e462 100644
---- a/include/sys/taskq.h
-+++ b/include/sys/taskq.h
-@@ -30,6 +30,7 @@
- #include <linux/slab.h>
- #include <linux/interrupt.h>
- #include <linux/kthread.h>
-+#include <linux/wait_compat.h>
- #include <sys/types.h>
- #include <sys/thread.h>
-@@ -79,13 +80,13 @@ typedef struct taskq {
-       struct list_head        tq_pend_list;  /* pending task_t's */
-       struct list_head        tq_prio_list;  /* priority pending task_t's */
-       struct list_head        tq_delay_list; /* delayed task_t's */
--      wait_queue_head_t       tq_work_waitq; /* new work waitq */
--      wait_queue_head_t       tq_wait_waitq; /* wait waitq */
-+      spl_wait_queue_head_t   tq_work_waitq; /* new work waitq */
-+      spl_wait_queue_head_t   tq_wait_waitq; /* wait waitq */
- } taskq_t;
- typedef struct taskq_ent {
-       spinlock_t              tqent_lock;
--      wait_queue_head_t       tqent_waitq;
-+      spl_wait_queue_head_t   tqent_waitq;
-       struct timer_list       tqent_timer;
-       struct list_head        tqent_list;
-       taskqid_t               tqent_id;
-diff --git a/spl_config.h.in b/spl_config.h.in
-index 7cd020be1151..52b110fdba88 100644
---- a/spl_config.h.in
-+++ b/spl_config.h.in
-@@ -144,6 +144,12 @@
- /* yes */
- #undef HAVE_WAIT_ON_BIT_ACTION
-+/* wait_queue_entry_t exists */
-+#undef HAVE_WAIT_QUEUE_ENTRY_T
-+
-+/* wq_head->head and wq_entry->entry exist */
-+#undef HAVE_WAIT_QUEUE_HEAD_ENTRY
-+
- /* Define to the sub-directory in which libtool stores uninstalled libraries.
-    */
- #undef LT_OBJDIR
-diff --git a/module/spl/spl-proc.c b/module/spl/spl-proc.c
-index eb00505d6ee8..08ca974145f3 100644
---- a/module/spl/spl-proc.c
-+++ b/module/spl/spl-proc.c
-@@ -402,11 +402,11 @@ static struct ctl_table spl_kmem_table[] = {
-                 .mode     = 0444,
-                 .proc_handler = &proc_doslab,
-         },
--      {0},
-+      {},
- };
- static struct ctl_table spl_kstat_table[] = {
--      {0},
-+      {},
- };
- static struct ctl_table spl_table[] = {
-@@ -437,7 +437,7 @@ static struct ctl_table spl_table[] = {
-               .mode     = 0555,
-               .child    = spl_kstat_table,
-       },
--        { 0 },
-+        {},
- };
- static struct ctl_table spl_dir[] = {
-@@ -446,7 +446,7 @@ static struct ctl_table spl_dir[] = {
-                 .mode     = 0555,
-                 .child    = spl_table,
-         },
--        { 0 }
-+        {}
- };
- static struct ctl_table spl_root[] = {
-@@ -458,7 +458,7 @@ static struct ctl_table spl_root[] = {
-       .mode = 0555,
-       .child = spl_dir,
-       },
--      { 0 }
-+      {}
- };
- int
-diff --git a/module/splat/splat-atomic.c b/module/splat/splat-atomic.c
-index 999f4f058767..b0a8c70615b7 100644
---- a/module/splat/splat-atomic.c
-+++ b/module/splat/splat-atomic.c
-@@ -28,6 +28,7 @@
- #include <sys/thread.h>
- #include <sys/mutex.h>
- #include <linux/mm_compat.h>
-+#include <linux/wait_compat.h>
- #include <linux/slab.h>
- #include "splat-internal.h"
-@@ -55,7 +56,7 @@ typedef struct atomic_priv {
-         unsigned long ap_magic;
-         struct file *ap_file;
-       kmutex_t ap_lock;
--        wait_queue_head_t ap_waitq;
-+        spl_wait_queue_head_t ap_waitq;
-       volatile uint64_t ap_atomic;
-       volatile uint64_t ap_atomic_exited;
-       atomic_op_t ap_op;
-diff --git a/module/splat/splat-kmem.c b/module/splat/splat-kmem.c
-index b3fd1a84dc87..b9b566f3e3da 100644
---- a/module/splat/splat-kmem.c
-+++ b/module/splat/splat-kmem.c
-@@ -275,8 +275,8 @@ typedef struct kmem_cache_priv {
-       struct file *kcp_file;
-       kmem_cache_t *kcp_cache;
-       spinlock_t kcp_lock;
--      wait_queue_head_t kcp_ctl_waitq;
--      wait_queue_head_t kcp_thr_waitq;
-+      spl_wait_queue_head_t kcp_ctl_waitq;
-+      spl_wait_queue_head_t kcp_thr_waitq;
-       int kcp_flags;
-       int kcp_kct_count;
-       kmem_cache_thread_t *kcp_kct[SPLAT_KMEM_THREADS];
-diff --git a/module/splat/splat-rwlock.c b/module/splat/splat-rwlock.c
-index 4576f20c7d00..7abb19d1c87c 100644
---- a/module/splat/splat-rwlock.c
-+++ b/module/splat/splat-rwlock.c
-@@ -76,7 +76,7 @@ typedef struct rw_priv {
-       struct file *rw_file;
-       krwlock_t rw_rwlock;
-       spinlock_t rw_lock;
--      wait_queue_head_t rw_waitq;
-+      spl_wait_queue_head_t rw_waitq;
-       int rw_completed;
-       int rw_holders;
-       int rw_waiters;
-diff --git a/module/splat/splat-thread.c b/module/splat/splat-thread.c
-index 8a44714078d4..dcf7d4a98788 100644
---- a/module/splat/splat-thread.c
-+++ b/module/splat/splat-thread.c
-@@ -28,6 +28,7 @@
- #include <sys/random.h>
- #include <linux/delay.h>
- #include <linux/mm_compat.h>
-+#include <linux/wait_compat.h>
- #include <linux/slab.h>
- #include "splat-internal.h"
-@@ -54,7 +55,7 @@ typedef struct thread_priv {
-         unsigned long tp_magic;
-         struct file *tp_file;
-         spinlock_t tp_lock;
--        wait_queue_head_t tp_waitq;
-+        spl_wait_queue_head_t tp_waitq;
-       uint_t tp_keys[SPLAT_THREAD_TEST_KEYS];
-       int tp_rc;
-       int tp_count;
-diff --git a/config/spl-build.m4 b/config/spl-build.m4
-index d5849635acfc..603fc65ec356 100644
---- a/config/spl-build.m4
-+++ b/config/spl-build.m4
-@@ -52,6 +52,8 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
-       SPL_AC_INODE_LOCK
-       SPL_AC_MUTEX_OWNER
-       SPL_AC_GROUP_INFO_GID
-+      SPL_AC_WAIT_QUEUE_ENTRY_T
-+      SPL_AC_WAIT_QUEUE_HEAD_ENTRY
- ])
- AC_DEFUN([SPL_AC_MODULE_SYMVERS], [
-@@ -1632,3 +1634,56 @@ AC_DEFUN([SPL_AC_GROUP_INFO_GID], [
-       ])
-       EXTRA_KCFLAGS="$tmp_flags"
- ])
-+
-+dnl #
-+dnl # 4.13 API change
-+dnl # Renamed struct wait_queue -> struct wait_queue_entry.
-+dnl #
-+AC_DEFUN([SPL_AC_WAIT_QUEUE_ENTRY_T], [
-+      AC_MSG_CHECKING([whether wait_queue_entry_t exists])
-+      SPL_LINUX_TRY_COMPILE([
-+              #include <linux/wait.h>
-+      ],[
-+              wait_queue_entry_t *entry __attribute__ ((unused));
-+      ],[
-+              AC_MSG_RESULT(yes)
-+              AC_DEFINE(HAVE_WAIT_QUEUE_ENTRY_T, 1,
-+                  [wait_queue_entry_t exists])
-+      ],[
-+              AC_MSG_RESULT(no)
-+      ])
-+])
-+
-+dnl #
-+dnl # 4.13 API change
-+dnl # Renamed wait_queue_head::task_list -> wait_queue_head::head
-+dnl # Renamed wait_queue_entry::task_list -> wait_queue_entry::entry
-+dnl #
-+AC_DEFUN([SPL_AC_WAIT_QUEUE_HEAD_ENTRY], [
-+      AC_MSG_CHECKING([whether wq_head->head and wq_entry->entry exist])
-+      SPL_LINUX_TRY_COMPILE([
-+              #include <linux/wait.h>
-+
-+              #ifdef HAVE_WAIT_QUEUE_ENTRY_T
-+              typedef wait_queue_head_t       spl_wait_queue_head_t;
-+              typedef wait_queue_entry_t      spl_wait_queue_entry_t;
-+              #else
-+              typedef wait_queue_head_t       spl_wait_queue_head_t;
-+              typedef wait_queue_t            spl_wait_queue_entry_t;
-+              #endif
-+      ],[
-+              spl_wait_queue_head_t wq_head;
-+              spl_wait_queue_entry_t wq_entry;
-+              struct list_head *head __attribute__ ((unused));
-+              struct list_head *entry __attribute__ ((unused));
-+
-+              head = &wq_head.head;
-+              entry = &wq_entry.entry;
-+      ],[
-+              AC_MSG_RESULT(yes)
-+              AC_DEFINE(HAVE_WAIT_QUEUE_HEAD_ENTRY, 1,
-+                  [wq_head->head and wq_entry->entry exist])
-+      ],[
-+              AC_MSG_RESULT(no)
-+      ])
-+])
-diff --git a/configure b/configure
-index df103800f919..608eff9beffa 100755
---- a/configure
-+++ b/configure
-@@ -15367,6 +15367,138 @@ fi
-       EXTRA_KCFLAGS="$tmp_flags"
-+
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wait_queue_entry_t exists" >&5
-+$as_echo_n "checking whether wait_queue_entry_t exists... " >&6; }
-+
-+
-+cat confdefs.h - <<_ACEOF >conftest.c
-+
-+
-+              #include <linux/wait.h>
-+
-+int
-+main (void)
-+{
-+
-+              wait_queue_entry_t *entry __attribute__ ((unused));
-+
-+  ;
-+  return 0;
-+}
-+
-+_ACEOF
-+
-+
-+      rm -Rf build && mkdir -p build && touch build/conftest.mod.c
-+      echo "obj-m := conftest.o" >build/Makefile
-+      modpost_flag=''
-+      test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
-+      if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; }; then :
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+$as_echo "#define HAVE_WAIT_QUEUE_ENTRY_T 1" >>confdefs.h
-+
-+
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+
-+
-+fi
-+      rm -Rf build
-+
-+
-+
-+
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wq_head->head and wq_entry->entry exist" >&5
-+$as_echo_n "checking whether wq_head->head and wq_entry->entry exist... " >&6; }
-+
-+
-+cat confdefs.h - <<_ACEOF >conftest.c
-+
-+
-+              #include <linux/wait.h>
-+
-+              #ifdef HAVE_WAIT_QUEUE_ENTRY_T
-+              typedef wait_queue_head_t       spl_wait_queue_head_t;
-+              typedef wait_queue_entry_t      spl_wait_queue_entry_t;
-+              #else
-+              typedef wait_queue_head_t       spl_wait_queue_head_t;
-+              typedef wait_queue_t            spl_wait_queue_entry_t;
-+              #endif
-+
-+int
-+main (void)
-+{
-+
-+              spl_wait_queue_head_t wq_head;
-+              spl_wait_queue_entry_t wq_entry;
-+              struct list_head *head __attribute__ ((unused));
-+              struct list_head *entry __attribute__ ((unused));
-+
-+              head = &wq_head.head;
-+              entry = &wq_entry.entry;
-+
-+  ;
-+  return 0;
-+}
-+
-+_ACEOF
-+
-+
-+      rm -Rf build && mkdir -p build && touch build/conftest.mod.c
-+      echo "obj-m := conftest.o" >build/Makefile
-+      modpost_flag=''
-+      test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
-+      if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; }; then :
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+$as_echo "#define HAVE_WAIT_QUEUE_HEAD_ENTRY 1" >>confdefs.h
-+
-+
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+
-+
-+fi
-+      rm -Rf build
-+
-+
-+
-  ;;
-               user)      ;;
-               all)
-@@ -18353,6 +18485,138 @@ fi
-       EXTRA_KCFLAGS="$tmp_flags"
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wait_queue_entry_t exists" >&5
-+$as_echo_n "checking whether wait_queue_entry_t exists... " >&6; }
-+
-+
-+cat confdefs.h - <<_ACEOF >conftest.c
-+
-+
-+              #include <linux/wait.h>
-+
-+int
-+main (void)
-+{
-+
-+              wait_queue_entry_t *entry __attribute__ ((unused));
-+
-+  ;
-+  return 0;
-+}
-+
-+_ACEOF
-+
-+
-+      rm -Rf build && mkdir -p build && touch build/conftest.mod.c
-+      echo "obj-m := conftest.o" >build/Makefile
-+      modpost_flag=''
-+      test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
-+      if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; }; then :
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+$as_echo "#define HAVE_WAIT_QUEUE_ENTRY_T 1" >>confdefs.h
-+
-+
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+
-+
-+fi
-+      rm -Rf build
-+
-+
-+
-+
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wq_head->head and wq_entry->entry exist" >&5
-+$as_echo_n "checking whether wq_head->head and wq_entry->entry exist... " >&6; }
-+
-+
-+cat confdefs.h - <<_ACEOF >conftest.c
-+
-+
-+              #include <linux/wait.h>
-+
-+              #ifdef HAVE_WAIT_QUEUE_ENTRY_T
-+              typedef wait_queue_head_t       spl_wait_queue_head_t;
-+              typedef wait_queue_entry_t      spl_wait_queue_entry_t;
-+              #else
-+              typedef wait_queue_head_t       spl_wait_queue_head_t;
-+              typedef wait_queue_t            spl_wait_queue_entry_t;
-+              #endif
-+
-+int
-+main (void)
-+{
-+
-+              spl_wait_queue_head_t wq_head;
-+              spl_wait_queue_entry_t wq_entry;
-+              struct list_head *head __attribute__ ((unused));
-+              struct list_head *entry __attribute__ ((unused));
-+
-+              head = &wq_head.head;
-+              entry = &wq_entry.entry;
-+
-+  ;
-+  return 0;
-+}
-+
-+_ACEOF
-+
-+
-+      rm -Rf build && mkdir -p build && touch build/conftest.mod.c
-+      echo "obj-m := conftest.o" >build/Makefile
-+      modpost_flag=''
-+      test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
-+      if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; }; then :
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+$as_echo "#define HAVE_WAIT_QUEUE_HEAD_ENTRY 1" >>confdefs.h
-+
-+
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+
-+
-+fi
-+      rm -Rf build
-+
-+
-+
-+
-                          ;;
-               srpm)                        ;;
-               *)
--- 
-2.14.1
-
diff --git a/patches/zfs/0001-4.13-compat.patch b/patches/zfs/0001-4.13-compat.patch
deleted file mode 100644 (file)
index 6055db1..0000000
+++ /dev/null
@@ -1,388 +0,0 @@
-From 307e735e4cc6806f476deb983d6ffa42dcb69f1c Mon Sep 17 00:00:00 2001
-From: Colin Ian King <colin.king@canonical.com>
-Date: Wed, 9 Aug 2017 17:16:31 +0100
-Subject: [PATCH] UBUNTU: SAUCE: (noup) Update spl to 0.6.5.11-ubuntu1, zfs to
- 0.6.5.11-1ubuntu3
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This includes backports of upstream 4.13 compat fixes from ZFS and SPL
-
-SPL:
-  120faefed90a ("Update struct member intializers to C89")
-  944117514d2a ("Linux 4.13 compat: wait queues")
-
-ZFS:
-  36ba27e9e07b ("Linux 4.13 compat: bio->bi_status and blk_status_t")
-
-Signed-off-by: Colin Ian King <colin.king@canonical.com>
-Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
-Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
----
- include/linux/blkdev_compat.h      |  92 +++++++++++++++++++++-
- zfs_config.h.in                    |   3 +
- module/zfs/vdev_disk.c             |  11 +--
- config/kernel-bio-end-io-t-args.m4 |  22 ++++++
- config/kernel.m4                   |   1 +
- configure                          | 136 +++++++++++++++++++++++++++++++++
- 6 files changed, 259 insertions(+), 6 deletions(-)
-
-diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h
-index 871506d7c924..f3054a375e0d 100644
---- a/include/linux/blkdev_compat.h
-+++ b/include/linux/blkdev_compat.h
-@@ -208,14 +208,104 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags)
- #define       DISK_NAME_LEN   32
- #endif /* DISK_NAME_LEN */
-+#ifdef HAVE_BIO_BI_STATUS
-+static inline int
-+bi_status_to_errno(blk_status_t status)
-+{
-+      switch (status) {
-+      case BLK_STS_OK:
-+              return (0);
-+      case BLK_STS_NOTSUPP:
-+              return (EOPNOTSUPP);
-+      case BLK_STS_TIMEOUT:
-+              return (ETIMEDOUT);
-+      case BLK_STS_NOSPC:
-+              return (ENOSPC);
-+      case BLK_STS_TRANSPORT:
-+              return (ENOLINK);
-+      case BLK_STS_TARGET:
-+              return (EREMOTEIO);
-+      case BLK_STS_NEXUS:
-+              return (EBADE);
-+      case BLK_STS_MEDIUM:
-+              return (ENODATA);
-+      case BLK_STS_PROTECTION:
-+              return (EILSEQ);
-+      case BLK_STS_RESOURCE:
-+              return (ENOMEM);
-+      case BLK_STS_AGAIN:
-+              return (EAGAIN);
-+      case BLK_STS_IOERR:
-+              return (EIO);
-+      default:
-+              return (EIO);
-+      }
-+}
-+
-+static inline blk_status_t
-+errno_to_bi_status(int error)
-+{
-+      switch (error) {
-+      case 0:
-+              return (BLK_STS_OK);
-+      case EOPNOTSUPP:
-+              return (BLK_STS_NOTSUPP);
-+      case ETIMEDOUT:
-+              return (BLK_STS_TIMEOUT);
-+      case ENOSPC:
-+              return (BLK_STS_NOSPC);
-+      case ENOLINK:
-+              return (BLK_STS_TRANSPORT);
-+      case EREMOTEIO:
-+              return (BLK_STS_TARGET);
-+      case EBADE:
-+              return (BLK_STS_NEXUS);
-+      case ENODATA:
-+              return (BLK_STS_MEDIUM);
-+      case EILSEQ:
-+              return (BLK_STS_PROTECTION);
-+      case ENOMEM:
-+              return (BLK_STS_RESOURCE);
-+      case EAGAIN:
-+              return (BLK_STS_AGAIN);
-+      case EIO:
-+              return (BLK_STS_IOERR);
-+      default:
-+              return (BLK_STS_IOERR);
-+      }
-+}
-+#endif /* HAVE_BIO_BI_STATUS */
-+
- /*
-  * 4.3 API change
-  * The bio_endio() prototype changed slightly.  These are helper
-  * macro's to ensure the prototype and invocation are handled.
-  */
- #ifdef HAVE_1ARG_BIO_END_IO_T
-+#ifdef HAVE_BIO_BI_STATUS
-+#define       BIO_END_IO_ERROR(bio)           bi_status_to_errno(bio->bi_status)
-+#define       BIO_END_IO_PROTO(fn, x, z)      static void fn(struct bio *x)
-+#define       BIO_END_IO(bio, error)          bio_set_bi_status(bio, error)
-+static inline void
-+bio_set_bi_status(struct bio *bio, int error)
-+{
-+      ASSERT3S(error, <=, 0);
-+      bio->bi_status = errno_to_bi_status(-error);
-+      bio_endio(bio);
-+}
-+#else
-+#define       BIO_END_IO_ERROR(bio)           (-(bio->bi_error))
- #define       BIO_END_IO_PROTO(fn, x, z)      static void fn(struct bio *x)
--#define       BIO_END_IO(bio, error)          bio->bi_error = error; bio_endio(bio);
-+#define       BIO_END_IO(bio, error)          bio_set_bi_error(bio, error)
-+static inline void
-+bio_set_bi_error(struct bio *bio, int error)
-+{
-+      ASSERT3S(error, <=, 0);
-+      bio->bi_error = error;
-+      bio_endio(bio);
-+}
-+#endif /* HAVE_BIO_BI_STATUS */
-+
- #else
- #define       BIO_END_IO_PROTO(fn, x, z)      static void fn(struct bio *x, int z)
- #define       BIO_END_IO(bio, error)          bio_endio(bio, error);
-diff --git a/zfs_config.h.in b/zfs_config.h.in
-index 11d946b6bc7d..94bbeb9e6216 100644
---- a/zfs_config.h.in
-+++ b/zfs_config.h.in
-@@ -51,6 +51,9 @@
- /* bio->bi_opf is defined */
- #undef HAVE_BIO_BI_OPF
-+/* bio->bi_status exists */
-+#undef HAVE_BIO_BI_STATUS
-+
- /* bio has bi_iter */
- #undef HAVE_BIO_BVEC_ITER
-diff --git a/module/zfs/vdev_disk.c b/module/zfs/vdev_disk.c
-index 5697f68671a8..33eba20a4a15 100644
---- a/module/zfs/vdev_disk.c
-+++ b/module/zfs/vdev_disk.c
-@@ -426,7 +426,7 @@ BIO_END_IO_PROTO(vdev_disk_physio_completion, bio, error)
-       if (dr->dr_error == 0) {
- #ifdef HAVE_1ARG_BIO_END_IO_T
--              dr->dr_error = -(bio->bi_error);
-+              dr->dr_error = BIO_END_IO_ERROR(bio);
- #else
-               if (error)
-                       dr->dr_error = -(error);
-@@ -613,16 +613,17 @@ __vdev_disk_physio(struct block_device *bdev, zio_t *zio, caddr_t kbuf_ptr,
-       return (error);
- }
--BIO_END_IO_PROTO(vdev_disk_io_flush_completion, bio, rc)
-+BIO_END_IO_PROTO(vdev_disk_io_flush_completion, bio, error)
- {
-       zio_t *zio = bio->bi_private;
- #ifdef HAVE_1ARG_BIO_END_IO_T
--      int rc = bio->bi_error;
-+      zio->io_error = BIO_END_IO_ERROR(bio);
-+#else
-+      zio->io_error = -error;
- #endif
-       zio->io_delay = jiffies_64 - zio->io_delay;
--      zio->io_error = -rc;
--      if (rc && (rc == -EOPNOTSUPP))
-+      if (zio->io_error && (zio->io_error == EOPNOTSUPP))
-               zio->io_vd->vdev_nowritecache = B_TRUE;
-       bio_put(bio);
-diff --git a/config/kernel-bio-end-io-t-args.m4 b/config/kernel-bio-end-io-t-args.m4
-index c8c520f1ba82..3c420cc0c305 100644
---- a/config/kernel-bio-end-io-t-args.m4
-+++ b/config/kernel-bio-end-io-t-args.m4
-@@ -22,3 +22,25 @@ AC_DEFUN([ZFS_AC_KERNEL_BIO_END_IO_T_ARGS], [
-               AC_MSG_RESULT(no)
-       ])
- ])
-+
-+dnl #
-+dnl # 4.13 API change
-+dnl # The bio->bi_error field was replaced with bio->bi_status which is an
-+dnl # enum which describes all possible error types.
-+dnl #
-+AC_DEFUN([ZFS_AC_KERNEL_BIO_BI_STATUS], [
-+      AC_MSG_CHECKING([whether bio->bi_status exists])
-+      ZFS_LINUX_TRY_COMPILE([
-+              #include <linux/bio.h>
-+      ],[
-+              struct bio bio __attribute__ ((unused));
-+              blk_status_t status __attribute__ ((unused)) = BLK_STS_OK;
-+
-+              bio.bi_status = status;
-+      ],[
-+              AC_MSG_RESULT(yes)
-+              AC_DEFINE(HAVE_BIO_BI_STATUS, 1, [bio->bi_status exists])
-+      ],[
-+              AC_MSG_RESULT(no)
-+      ])
-+])
-diff --git a/config/kernel.m4 b/config/kernel.m4
-index 4a8eeab2ae10..9c6802a6c20b 100644
---- a/config/kernel.m4
-+++ b/config/kernel.m4
-@@ -28,6 +28,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
-       ZFS_AC_KERNEL_REQ_OP_FLUSH
-       ZFS_AC_KERNEL_BIO_BI_OPF
-       ZFS_AC_KERNEL_BIO_END_IO_T_ARGS
-+      ZFS_AC_KERNEL_BIO_BI_STATUS
-       ZFS_AC_KERNEL_BIO_RW_BARRIER
-       ZFS_AC_KERNEL_BIO_RW_DISCARD
-       ZFS_AC_KERNEL_BLK_QUEUE_FLUSH
-diff --git a/configure b/configure
-index 8e386e6a8c44..9634569bb611 100755
---- a/configure
-+++ b/configure
-@@ -29519,6 +29519,74 @@ fi
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio->bi_status exists" >&5
-+$as_echo_n "checking whether bio->bi_status exists... " >&6; }
-+
-+
-+cat confdefs.h - <<_ACEOF >conftest.c
-+
-+
-+              #include <linux/bio.h>
-+
-+int
-+main (void)
-+{
-+
-+              struct bio bio __attribute__ ((unused));
-+              blk_status_t status __attribute__ ((unused)) = BLK_STS_OK;
-+
-+              bio.bi_status = status;
-+
-+  ;
-+  return 0;
-+}
-+
-+_ACEOF
-+
-+
-+
-+cat - <<_ACEOF >conftest.h
-+
-+_ACEOF
-+
-+
-+      rm -Rf build && mkdir -p build && touch build/conftest.mod.c
-+      echo "obj-m := conftest.o" >build/Makefile
-+      modpost_flag=''
-+      test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
-+      if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; }; then :
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+$as_echo "#define HAVE_BIO_BI_STATUS 1" >>confdefs.h
-+
-+
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+
-+
-+fi
-+      rm -Rf build
-+
-+
-+
-+
-       { $as_echo "$as_me:$LINENO: checking whether BIO_RW_BARRIER is defined" >&5
- $as_echo_n "checking whether BIO_RW_BARRIER is defined... " >&6; }
-@@ -29919,6 +29987,74 @@ fi
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio->bi_status exists" >&5
-+$as_echo_n "checking whether bio->bi_status exists... " >&6; }
-+
-+
-+cat confdefs.h - <<_ACEOF >conftest.c
-+
-+
-+              #include <linux/bio.h>
-+
-+int
-+main (void)
-+{
-+
-+              struct bio bio __attribute__ ((unused));
-+              blk_status_t status __attribute__ ((unused)) = BLK_STS_OK;
-+
-+              bio.bi_status = status;
-+
-+  ;
-+  return 0;
-+}
-+
-+_ACEOF
-+
-+
-+
-+cat - <<_ACEOF >conftest.h
-+
-+_ACEOF
-+
-+
-+      rm -Rf build && mkdir -p build && touch build/conftest.mod.c
-+      echo "obj-m := conftest.o" >build/Makefile
-+      modpost_flag=''
-+      test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
-+      if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o'
-+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; }; then :
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+$as_echo "#define HAVE_BIO_BI_STATUS 1" >>confdefs.h
-+
-+
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+
-+
-+fi
-+      rm -Rf build
-+
-+
-+
-+
-       { $as_echo "$as_me:$LINENO: checking whether BIO_RW_BARRIER is defined" >&5
- $as_echo_n "checking whether BIO_RW_BARRIER is defined... " >&6; }
--- 
-2.14.1
-
diff --git a/submodules/spl-module b/submodules/spl-module
deleted file mode 160000 (submodule)
index b635835..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit b6358351cca47024ffb421bf986f2a949608188e
diff --git a/submodules/zfs-module b/submodules/zfs-module
deleted file mode 160000 (submodule)
index a540f8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a540f8d7eff8fa1d79909c4f2e8a3a03535ede74
diff --git a/submodules/zfsonlinux b/submodules/zfsonlinux
new file mode 160000 (submodule)
index 0000000..2ce263d
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 2ce263d24dfa524b0504e2f3e0eb03ad6abda8da