update ZFS/SPL to 0.7.2
and switch submodule to simplify patch handling
This commit is contained in:
parent
dc8dc362e5
commit
2e38f6f987
7 changed files with 16 additions and 1021 deletions
9
.gitmodules
vendored
9
.gitmodules
vendored
|
@ -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"]
|
[submodule "submodules/ubuntu-artful"]
|
||||||
path = submodules/ubuntu-artful
|
path = submodules/ubuntu-artful
|
||||||
url = ../mirror_ubuntu-artful-kernel
|
url = ../mirror_ubuntu-artful-kernel
|
||||||
|
[submodule "submodules/zfsonlinux"]
|
||||||
|
path = submodules/zfsonlinux
|
||||||
|
url = ../zfsonlinux
|
||||||
|
|
20
Makefile
20
Makefile
|
@ -44,12 +44,13 @@ IGBSRC=${IGBDIR}.tar.gz
|
||||||
IXGBEDIR=ixgbe-5.2.3
|
IXGBEDIR=ixgbe-5.2.3
|
||||||
IXGBESRC=${IXGBEDIR}.tar.gz
|
IXGBESRC=${IXGBEDIR}.tar.gz
|
||||||
|
|
||||||
|
ZFSONLINUX_SUBMODULE=submodules/zfsonlinux
|
||||||
SPLDIR=pkg-spl
|
SPLDIR=pkg-spl
|
||||||
SPLSRC=submodules/spl-module
|
SPLSRC=${ZFSONLINUX_SUBMODULE}/spl-debian
|
||||||
ZFSDIR=pkg-zfs
|
ZFSDIR=pkg-zfs
|
||||||
ZFSSRC=submodules/zfs-module
|
ZFSSRC=${ZFSONLINUX_SUBMODULE}/zfs-debian
|
||||||
ZFS_KO=zfs.ko
|
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)
|
ZFS_MODULES=$(ZFS_KO) $(ZFS_KO_REST)
|
||||||
SPL_KO=spl.ko
|
SPL_KO=spl.ko
|
||||||
SPL_KO_REST=splat.ko
|
SPL_KO_REST=splat.ko
|
||||||
|
@ -271,7 +272,7 @@ $(SPL_KO): .compile_mark ${SPLSRC}
|
||||||
rm -rf ${SPLDIR}
|
rm -rf ${SPLDIR}
|
||||||
rsync -ra ${SPLSRC}/ ${SPLDIR}
|
rsync -ra ${SPLSRC}/ ${SPLDIR}
|
||||||
[ ! -e /lib/modules/${KVNAME}/build ] || (echo "please remove /lib/modules/${KVNAME}/build" && false)
|
[ ! -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}; ./autogen.sh
|
||||||
cd ${SPLDIR}; ./configure --with-config=kernel --with-linux=${TOP}/${KERNEL_SRC} --with-linux-obj=${TOP}/${KERNEL_SRC}
|
cd ${SPLDIR}; ./configure --with-config=kernel --with-linux=${TOP}/${KERNEL_SRC} --with-linux-obj=${TOP}/${KERNEL_SRC}
|
||||||
cd ${SPLDIR}; make
|
cd ${SPLDIR}; make
|
||||||
|
@ -283,7 +284,7 @@ $(ZFS_KO): .compile_mark ${ZFSSRC}
|
||||||
rm -rf ${ZFSDIR}
|
rm -rf ${ZFSDIR}
|
||||||
rsync -ra ${ZFSSRC}/ ${ZFSDIR}
|
rsync -ra ${ZFSSRC}/ ${ZFSDIR}
|
||||||
[ ! -e /lib/modules/${KVNAME}/build ] || (echo "please remove /lib/modules/${KVNAME}/build" && false)
|
[ ! -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}; ./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}; ./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
|
cd ${ZFSDIR}; make
|
||||||
|
@ -293,6 +294,7 @@ $(ZFS_KO): .compile_mark ${ZFSSRC}
|
||||||
cp ${ZFSDIR}/module/unicode/zunicode.ko zunicode.ko
|
cp ${ZFSDIR}/module/unicode/zunicode.ko zunicode.ko
|
||||||
cp ${ZFSDIR}/module/zcommon/zcommon.ko zcommon.ko
|
cp ${ZFSDIR}/module/zcommon/zcommon.ko zcommon.ko
|
||||||
cp ${ZFSDIR}/module/zpios/zpios.ko zpios.ko
|
cp ${ZFSDIR}/module/zpios/zpios.ko zpios.ko
|
||||||
|
cp ${ZFSDIR}/module/icp/icp.ko icp.ko
|
||||||
|
|
||||||
headers_tmp := $(CURDIR)/tmp-headers
|
headers_tmp := $(CURDIR)/tmp-headers
|
||||||
headers_dir := $(headers_tmp)/usr/src/linux-headers-${KVNAME}
|
headers_dir := $(headers_tmp)/usr/src/linux-headers-${KVNAME}
|
||||||
|
@ -336,13 +338,15 @@ distclean: clean
|
||||||
.PHONY: update_modules
|
.PHONY: update_modules
|
||||||
update_modules: submodule
|
update_modules: submodule
|
||||||
git submodule foreach 'git pull --ff-only origin master'
|
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
|
# make sure submodules were initialized
|
||||||
.PHONY: submodule
|
.PHONY: submodule
|
||||||
submodule:
|
submodule:
|
||||||
test -f "${KERNEL_SRC_SUBMODULE}/README" || git submodule update --init
|
test -f "${KERNEL_SRC_SUBMODULE}/README" || git submodule update --init ${KERNEL_SRC_SUBMODULE}
|
||||||
test -f "${ZFSSRC}/debian/changelog" || git submodule update --init
|
test -f "${ZFSONLINUX_SUBMODULE}/Makefile" || git submodule update --init ${ZFSONLINUX_SUBMODULE}
|
||||||
test -f "${SPLSRC}/debian/changelog" || git submodule update --init
|
(test -f "${ZFSSRC}/debian/changelog" && test -f "${SPLZRC}/debian/changelog") || (cd ${ZFSONLINUX_SUBMODULE}; git submodule update --init)
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit b6358351cca47024ffb421bf986f2a949608188e
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit a540f8d7eff8fa1d79909c4f2e8a3a03535ede74
|
|
1
submodules/zfsonlinux
Submodule
1
submodules/zfsonlinux
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 2ce263d24dfa524b0504e2f3e0eb03ad6abda8da
|
Loading…
Reference in a new issue