summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesus Alvarez2017-12-03 16:05:06 -0800
committerJesus Alvarez2017-12-03 16:05:06 -0800
commite72cf258d6ce143674d04a456710eb26d16b19e7 (patch)
tree8b216988ab2ad5a1f50978ec214da62c87b54924
parent4564c567141b22fb14be67e45327d25fa01ffb31 (diff)
downloadaur-e72cf258d6ce143674d04a456710eb26d16b19e7.tar.gz
Semi-automated update for 4.14.3.a.1-1
-rw-r--r--.SRCINFO12
-rw-r--r--0001-Linux-4.14-compat-vfs_read-vfs_write.patch206
-rw-r--r--PKGBUILD20
-rw-r--r--spl.install2
4 files changed, 226 insertions, 14 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 540419389f8d..9b28bdfecff0 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,17 +1,19 @@
# Generated by mksrcinfo v8
-# Sun Dec 3 18:05:37 UTC 2017
+# Sun Dec 3 23:46:20 UTC 2017
pkgbase = spl-linux-hardened
- pkgver = 0.7.3_4.13.16.a.1
+ pkgver = 0.7.3_4.14.3.a.1
pkgrel = 1
url = http://zfsonlinux.org/
arch = x86_64
license = GPL
- makedepends = linux-hardened-headers=4.13.16.a-1
- depends = spl-utils-common>=0.7.3
+ makedepends = linux-hardened-headers=4.14.3.a-1
+ depends = spl-utils-common=0.7.3
depends = kmod
- depends = linux-hardened=4.13.16.a-1
+ depends = linux-hardened=4.14.3.a-1
source = https://github.com/zfsonlinux/zfs/releases/download/zfs-0.7.3/spl-0.7.3.tar.gz
+ source = 0001-Linux-4.14-compat-vfs_read-vfs_write.patch
sha256sums = cd8b8624163577bdec1d1d214c942c5771f183432a04d35c00fc6e7f12fa836b
+ sha256sums = d20506fbe6e9ee928005e8a73c03e4b4d207268348f684b9c7a33301067793b8
pkgname = spl-linux-hardened
pkgdesc = Solaris Porting Layer kernel modules.
diff --git a/0001-Linux-4.14-compat-vfs_read-vfs_write.patch b/0001-Linux-4.14-compat-vfs_read-vfs_write.patch
new file mode 100644
index 000000000000..bf04af065d70
--- /dev/null
+++ b/0001-Linux-4.14-compat-vfs_read-vfs_write.patch
@@ -0,0 +1,206 @@
+From ed19bccfb651843fa208232b3a2d3d22a4152bc8 Mon Sep 17 00:00:00 2001
+From: Brian Behlendorf <behlendorf1@llnl.gov>
+Date: Wed, 15 Nov 2017 17:19:23 -0800
+Subject: [PATCH] Linux 4.14 compat: vfs_read & vfs_write
+
+The kernel_read & kernel_write functions have always wrapped the
+vfs_read & vfs_write functions respectively. However, they could
+not be used by vn_rdwr() since the offset wasn't passed as a
+pointer. This prevented us from being able to properly update
+the file offset.
+
+Linux 4.14 unexported vfs_read & vfs_write but also changed the
+signature of kernel_read & kernel_write to provide the needed
+functionality. Use these updated functions when available.
+
+Reviewed-by: Pritam Baral <pritam@pritambaral.com>
+Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
+Closes #656
+Closes #667
+---
+ config/spl-build.m4 | 60 +++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/file_compat.h | 41 +++++++++++++++++++++++++++++++
+ module/spl/spl-vnode.c | 21 +++-------------
+ 3 files changed, 105 insertions(+), 17 deletions(-)
+
+diff --git a/config/spl-build.m4 b/config/spl-build.m4
+index 8e9dc99..7b66f2c 100644
+--- a/config/spl-build.m4
++++ b/config/spl-build.m4
+@@ -52,6 +52,8 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
+ SPL_AC_KMEM_CACHE_CREATE_USERCOPY
+ SPL_AC_WAIT_QUEUE_ENTRY_T
+ SPL_AC_WAIT_QUEUE_HEAD_ENTRY
++ SPL_AC_KERNEL_WRITE
++ SPL_AC_KERNEL_READ
+ ])
+
+ AC_DEFUN([SPL_AC_MODULE_SYMVERS], [
+@@ -1594,3 +1596,61 @@ AC_DEFUN([SPL_AC_WAIT_QUEUE_HEAD_ENTRY], [
+ AC_MSG_RESULT(no)
+ ])
+ ])
++
++dnl #
++dnl # 4.14 API change
++dnl # kernel_write() which was introduced in 3.9 was updated to take
++dnl # the offset as a pointer which is needed by vn_rdwr().
++dnl #
++AC_DEFUN([SPL_AC_KERNEL_WRITE], [
++ AC_MSG_CHECKING([whether kernel_write() takes loff_t pointer])
++ tmp_flags="$EXTRA_KCFLAGS"
++ EXTRA_KCFLAGS="-Werror"
++ SPL_LINUX_TRY_COMPILE([
++ #include <linux/fs.h>
++ ],[
++ struct file *file = NULL;
++ const void *buf = NULL;
++ size_t count = 0;
++ loff_t *pos = NULL;
++ ssize_t ret;
++
++ ret = kernel_write(file, buf, count, pos);
++ ],[
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(HAVE_KERNEL_WRITE_PPOS, 1,
++ [kernel_write() take loff_t pointer])
++ ],[
++ AC_MSG_RESULT(no)
++ ])
++ EXTRA_KCFLAGS="$tmp_flags"
++])
++
++dnl #
++dnl # 4.14 API change
++dnl # kernel_read() which has existed for forever was updated to take
++dnl # the offset as a pointer which is needed by vn_rdwr().
++dnl #
++AC_DEFUN([SPL_AC_KERNEL_READ], [
++ AC_MSG_CHECKING([whether kernel_read() takes loff_t pointer])
++ tmp_flags="$EXTRA_KCFLAGS"
++ EXTRA_KCFLAGS="-Werror"
++ SPL_LINUX_TRY_COMPILE([
++ #include <linux/fs.h>
++ ],[
++ struct file *file = NULL;
++ void *buf = NULL;
++ size_t count = 0;
++ loff_t *pos = NULL;
++ ssize_t ret;
++
++ ret = kernel_read(file, buf, count, pos);
++ ],[
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(HAVE_KERNEL_READ_PPOS, 1,
++ [kernel_read() take loff_t pointer])
++ ],[
++ AC_MSG_RESULT(no)
++ ])
++ EXTRA_KCFLAGS="$tmp_flags"
++])
+diff --git a/include/linux/file_compat.h b/include/linux/file_compat.h
+index 7d61ba5..55ba2cc 100644
+--- a/include/linux/file_compat.h
++++ b/include/linux/file_compat.h
+@@ -26,6 +26,7 @@
+ #define _SPL_FILE_COMPAT_H
+
+ #include <linux/fs.h>
++#include <linux/uaccess.h>
+ #ifdef HAVE_FDTABLE_HEADER
+ #include <linux/fdtable.h>
+ #endif
+@@ -70,6 +71,46 @@ spl_filp_fallocate(struct file *fp, int mode, loff_t offset, loff_t len)
+ return (error);
+ }
+
++static inline ssize_t
++spl_kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos)
++{
++#if defined(HAVE_KERNEL_WRITE_PPOS)
++ return (kernel_write(file, buf, count, pos));
++#else
++ mm_segment_t saved_fs;
++ ssize_t ret;
++
++ saved_fs = get_fs();
++ set_fs(get_ds());
++
++ ret = vfs_write(file, (__force const char __user *)buf, count, pos);
++
++ set_fs(saved_fs);
++
++ return (ret);
++#endif
++}
++
++static inline ssize_t
++spl_kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
++{
++#if defined(HAVE_KERNEL_READ_PPOS)
++ return (kernel_read(file, buf, count, pos));
++#else
++ mm_segment_t saved_fs;
++ ssize_t ret;
++
++ saved_fs = get_fs();
++ set_fs(get_ds());
++
++ ret = vfs_read(file, (void __user *)buf, count, pos);
++
++ set_fs(saved_fs);
++
++ return (ret);
++#endif
++}
++
+ #ifdef HAVE_2ARGS_VFS_FSYNC
+ #define spl_filp_fsync(fp, sync) vfs_fsync(fp, sync)
+ #else
+diff --git a/module/spl/spl-vnode.c b/module/spl/spl-vnode.c
+index 0e4c386..19b3b76 100644
+--- a/module/spl/spl-vnode.c
++++ b/module/spl/spl-vnode.c
+@@ -211,35 +211,22 @@ int
+ vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off,
+ uio_seg_t seg, int ioflag, rlim64_t x2, void *x3, ssize_t *residp)
+ {
+- loff_t offset;
+- mm_segment_t saved_fs;
+- struct file *fp;
++ struct file *fp = vp->v_file;
++ loff_t offset = off;
+ int rc;
+
+ ASSERT(uio == UIO_WRITE || uio == UIO_READ);
+- ASSERT(vp);
+- ASSERT(vp->v_file);
+ ASSERT(seg == UIO_SYSSPACE);
+ ASSERT((ioflag & ~FAPPEND) == 0);
+
+- fp = vp->v_file;
+-
+- offset = off;
+ if (ioflag & FAPPEND)
+ offset = fp->f_pos;
+
+- /* Writable user data segment must be briefly increased for this
+- * process so we can use the user space read call paths to write
+- * in to memory allocated by the kernel. */
+- saved_fs = get_fs();
+- set_fs(get_ds());
+-
+ if (uio & UIO_WRITE)
+- rc = vfs_write(fp, addr, len, &offset);
++ rc = spl_kernel_write(fp, addr, len, &offset);
+ else
+- rc = vfs_read(fp, addr, len, &offset);
++ rc = spl_kernel_read(fp, addr, len, &offset);
+
+- set_fs(saved_fs);
+ fp->f_pos = offset;
+
+ if (rc < 0)
+--
+2.15.1
+
diff --git a/PKGBUILD b/PKGBUILD
index 0beef0d33026..2f70ed367cea 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -18,22 +18,26 @@
pkgbase="spl-linux-hardened"
pkgname=("spl-linux-hardened" "spl-linux-hardened-headers")
-pkgver=0.7.3_4.13.16.a.1
+pkgver=0.7.3_4.14.3.a.1
pkgrel=1
-makedepends=("linux-hardened-headers=4.13.16.a-1")
+makedepends=("linux-hardened-headers=4.14.3.a-1")
arch=("x86_64")
url="http://zfsonlinux.org/"
-source=("https://github.com/zfsonlinux/zfs/releases/download/zfs-0.7.3/spl-0.7.3.tar.gz")
-sha256sums=("cd8b8624163577bdec1d1d214c942c5771f183432a04d35c00fc6e7f12fa836b")
+source=("https://github.com/zfsonlinux/zfs/releases/download/zfs-0.7.3/spl-0.7.3.tar.gz" '0001-Linux-4.14-compat-vfs_read-vfs_write.patch')
+sha256sums=("cd8b8624163577bdec1d1d214c942c5771f183432a04d35c00fc6e7f12fa836b" 'd20506fbe6e9ee928005e8a73c03e4b4d207268348f684b9c7a33301067793b8')
license=("GPL")
-depends=("spl-utils-common>=0.7.3" "kmod" "linux-hardened=4.13.16.a-1")
+depends=("spl-utils-common=0.7.3" "kmod" "linux-hardened=4.14.3.a-1")
+prepare() {
+ cd "${srcdir}/spl-0.7.3"
+ patch -Np1 -i ${srcdir}/0001-Linux-4.14-compat-vfs_read-vfs_write.patch
+}
build() {
cd "${srcdir}/spl-0.7.3"
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \
- --with-linux=/usr/lib/modules/4.13.16-1-hardened/build \
- --with-linux-obj=/usr/lib/modules/4.13.16-1-hardened/build \
+ --with-linux=/usr/lib/modules/4.14.3-1-hardened/build \
+ --with-linux-obj=/usr/lib/modules/4.14.3-1-hardened/build \
--with-config=kernel
make
}
@@ -58,5 +62,5 @@ package_spl-linux-hardened-headers() {
make DESTDIR="${pkgdir}" install
rm -r "${pkgdir}/lib"
# Remove reference to ${srcdir}
- sed -i "s+${srcdir}++" ${pkgdir}/usr/src/spl-*/4.13.16-1-hardened/Module.symvers
+ sed -i "s+${srcdir}++" ${pkgdir}/usr/src/spl-*/4.14.3-1-hardened/Module.symvers
}
diff --git a/spl.install b/spl.install
index 65e0c36e79d6..d89db5bf63c8 100644
--- a/spl.install
+++ b/spl.install
@@ -12,5 +12,5 @@ post_upgrade() {
run_depmod() {
echo ">>> Updating SPL module dependencies"
- depmod -a 4.13.16-1-hardened
+ depmod -a 4.14.3-1-hardened
}