diff options
author | Jesus Alvarez | 2017-12-03 16:05:06 -0800 |
---|---|---|
committer | Jesus Alvarez | 2017-12-03 16:05:06 -0800 |
commit | e72cf258d6ce143674d04a456710eb26d16b19e7 (patch) | |
tree | 8b216988ab2ad5a1f50978ec214da62c87b54924 | |
parent | 4564c567141b22fb14be67e45327d25fa01ffb31 (diff) | |
download | aur-e72cf258d6ce143674d04a456710eb26d16b19e7.tar.gz |
Semi-automated update for 4.14.3.a.1-1
-rw-r--r-- | .SRCINFO | 12 | ||||
-rw-r--r-- | 0001-Linux-4.14-compat-vfs_read-vfs_write.patch | 206 | ||||
-rw-r--r-- | PKGBUILD | 20 | ||||
-rw-r--r-- | spl.install | 2 |
4 files changed, 226 insertions, 14 deletions
@@ -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 + @@ -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 } |