diff options
-rw-r--r-- | .SRCINFO | 10 | ||||
-rw-r--r-- | 0001-Correct-m4-conditionals-in-curses.m4.patch | 4 | ||||
-rw-r--r-- | 0002-Linux-Test-for-__vfs_write-rather-than-__vfs_read.patch | 99 | ||||
-rw-r--r-- | 0003-Linux-Use-kernel_read-kernel_write-when-__vfs-varian.patch | 142 | ||||
-rw-r--r-- | PKGBUILD | 14 |
5 files changed, 261 insertions, 8 deletions
@@ -1,9 +1,9 @@ # Generated by mksrcinfo v8 -# Mon Oct 23 16:41:48 UTC 2017 +# Mon Nov 13 19:26:05 UTC 2017 pkgbase = openafs-modules pkgdesc = Kernel module for OpenAFS pkgver = 1.6.21.1 - pkgrel = 1 + pkgrel = 2 url = http://www.openafs.org install = openafs-modules.install arch = i686 @@ -17,8 +17,12 @@ pkgbase = openafs-modules options = !emptydirs source = http://openafs.org/dl/1.6.21.1/openafs-1.6.21.1-src.tar.bz2 source = 0001-Correct-m4-conditionals-in-curses.m4.patch + source = 0002-Linux-Test-for-__vfs_write-rather-than-__vfs_read.patch + source = 0003-Linux-Use-kernel_read-kernel_write-when-__vfs-varian.patch sha256sums = aed896b0f598e3033e9ceb2a1eae24addff9ec0bb2d713ab63945a449ded3a5a - sha256sums = 588cc4b220b7bd4783ffb44d9bfd490a67d1d4a58da20b952151fd842ca8f18d + sha256sums = 250145d4abd704f739ade491e8d685873813a720b954f6c09a6186fb8662c415 + sha256sums = 28511f96c142eb918c4f92bf43427883f3f9eb32a8ea8a4de85b56c1b57957a4 + sha256sums = 4040a57c012498c06d60b678b072d6ce415f7b8b1a6fc01140b42c392515da36 pkgname = openafs-modules diff --git a/0001-Correct-m4-conditionals-in-curses.m4.patch b/0001-Correct-m4-conditionals-in-curses.m4.patch index 7e57fc07d4ed..96f336c5cd7d 100644 --- a/0001-Correct-m4-conditionals-in-curses.m4.patch +++ b/0001-Correct-m4-conditionals-in-curses.m4.patch @@ -1,7 +1,7 @@ From 86ccc8d7c3bc57d5011474a8a5da228ea851104a Mon Sep 17 00:00:00 2001 From: Benjamin Kaduk <kaduk@mit.edu> Date: Mon, 16 Oct 2017 16:53:22 -0500 -Subject: [PATCH] Correct m4 conditionals in curses.m4 +Subject: [PATCH 1/3] Correct m4 conditionals in curses.m4 AS_IF does not invoke the test(1) shell builtin for us, so we must take care to consistently use it ourself. @@ -63,5 +63,5 @@ index a0cdc60f1..dc01469f5 100644 dnl The top level curses group AC_DEFUN([OPENAFS_CURSES], -- -2.14.2 +2.15.0 diff --git a/0002-Linux-Test-for-__vfs_write-rather-than-__vfs_read.patch b/0002-Linux-Test-for-__vfs_write-rather-than-__vfs_read.patch new file mode 100644 index 000000000000..e5d0d16992a4 --- /dev/null +++ b/0002-Linux-Test-for-__vfs_write-rather-than-__vfs_read.patch @@ -0,0 +1,99 @@ +From e5a30e15337cf008d253ae3368d6421ab27e8f2d Mon Sep 17 00:00:00 2001 +From: Damien Diederen <ddiederen@sinenomine.net> +Date: Mon, 18 Sep 2017 11:59:40 +0200 +Subject: [PATCH 2/3] Linux: Test for __vfs_write rather than __vfs_read + +The following commit: + + commit eb031849d52e61d24ba54e9d27553189ff328174 + Author: Christoph Hellwig <hch@lst.de> + Date: Fri Sep 1 17:39:23 2017 +0200 + + fs: unexport __vfs_read/__vfs_write + +unexports both __vfs_read and __vfs_write, but keeps the former in +fs.h--as it is is still being used by another part of the tree. + +This situation results in a false positive in our Autoconf check, +which does not see the export statements, and ends up marking the +corresponding API as available. + +That, in turn, causes some code which assumes symmetry with +__vfs_write to fail to compile. + +Switch to testing for __vfs_write, which correctly marks the API as +unavailable. + +Reviewed-on: https://gerrit.openafs.org/12728 +Tested-by: BuildBot <buildbot@rampaginggeek.com> +Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> +(cherry picked from commit 929e77a886fc9853ee292ba1aa52a920c454e94b) + +Reviewed-on: https://gerrit.openafs.org/12736 +Tested-by: BuildBot <buildbot@rampaginggeek.com> +Reviewed-by: Mark Vitale <mvitale@sinenomine.net> +Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> +Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> +(cherry picked from commit c42a25d28fbcc76fdcac2b5f29704f8f1b353b45) + +Change-Id: I27c1c67bed6ebb922389ebb70cbb7fc238378b58 +--- + acinclude.m4 | 4 ++-- + src/afs/LINUX/osi_compat.h | 4 ++-- + src/afs/LINUX/osi_vnodeops.c | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/acinclude.m4 b/acinclude.m4 +index d80cacd78..8353ca597 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -939,9 +939,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) + + dnl Function existence checks + +- AC_CHECK_LINUX_FUNC([__vfs_read], ++ AC_CHECK_LINUX_FUNC([__vfs_write], + [#include <linux/fs.h>], +- [__vfs_read(NULL, NULL, 0, NULL);]) ++ [__vfs_write(NULL, NULL, 0, NULL);]) + AC_CHECK_LINUX_FUNC([bdi_init], + [#include <linux/backing-dev.h>], + [bdi_init(NULL);]) +diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h +index 8e72161bf..9ebe9c178 100644 +--- a/src/afs/LINUX/osi_compat.h ++++ b/src/afs/LINUX/osi_compat.h +@@ -595,7 +595,7 @@ afs_d_invalidate(struct dentry *dp) + static inline int + afs_file_read(struct file *filp, char __user *buf, size_t len, loff_t *pos) + { +-#if defined(HAVE_LINUX___VFS_READ) ++#if defined(HAVE_LINUX___VFS_WRITE) + return __vfs_read(filp, buf, len, pos); + #else + return filp->f_op->read(filp, buf, len, pos); +@@ -605,7 +605,7 @@ afs_file_read(struct file *filp, char __user *buf, size_t len, loff_t *pos) + static inline int + afs_file_write(struct file *filp, char __user *buf, size_t len, loff_t *pos) + { +-#if defined(HAVE_LINUX___VFS_READ) ++#if defined(HAVE_LINUX___VFS_WRITE) + return __vfs_write(filp, buf, len, pos); + #else + return filp->f_op->write(filp, buf, len, pos); +diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c +index f46d8dda8..3d9d71791 100644 +--- a/src/afs/LINUX/osi_vnodeops.c ++++ b/src/afs/LINUX/osi_vnodeops.c +@@ -807,7 +807,7 @@ struct file_operations afs_file_fops = { + #ifdef STRUCT_FILE_OPERATIONS_HAS_READ_ITER + .read_iter = afs_linux_read_iter, + .write_iter = afs_linux_write_iter, +-# if !defined(HAVE_LINUX___VFS_READ) ++# if !defined(HAVE_LINUX___VFS_WRITE) + .read = new_sync_read, + .write = new_sync_write, + # endif +-- +2.15.0 + diff --git a/0003-Linux-Use-kernel_read-kernel_write-when-__vfs-varian.patch b/0003-Linux-Use-kernel_read-kernel_write-when-__vfs-varian.patch new file mode 100644 index 000000000000..e9530743b81f --- /dev/null +++ b/0003-Linux-Use-kernel_read-kernel_write-when-__vfs-varian.patch @@ -0,0 +1,142 @@ +From 8c11a97ec0991800c12311a123134f8b5fd59f5e Mon Sep 17 00:00:00 2001 +From: Damien Diederen <ddiederen@sinenomine.net> +Date: Mon, 18 Sep 2017 12:18:39 +0200 +Subject: [PATCH 3/3] Linux: Use kernel_read/kernel_write when __vfs variants + are unavailable + +We hide the uses of set_fs/get_fs behind a macro, as those functions +are likely to soon become unavailable: + +> Christoph Hellwig suggested removing all calls outside of the core +> filesystem and architecture code; Andy Lutomirski went one step +> further and said they should all go. + + https://lwn.net/Articles/722267/ + +Reviewed-on: https://gerrit.openafs.org/12729 +Tested-by: BuildBot <buildbot@rampaginggeek.com> +Reviewed-by: Mark Vitale <mvitale@sinenomine.net> +Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> +(cherry picked from commit 5ee516b3789d3545f3d78fb3aba2480308359945) + +Reviewed-on: https://gerrit.openafs.org/12737 +Tested-by: BuildBot <buildbot@rampaginggeek.com> +Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> +Reviewed-by: Mark Vitale <mvitale@sinenomine.net> +Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> +(cherry picked from commit d93f80622370f50d7bce5c5b00cd062f15ee9eba) + +Change-Id: Ib4515c858d0a06d3706ec7de212c35551d3e7240 +--- + acinclude.m4 | 3 +++ + src/afs/LINUX/osi_compat.h | 12 ++++++++++++ + src/afs/LINUX/osi_file.c | 6 ++++++ + src/afs/LINUX/osi_vnodeops.c | 2 +- + 4 files changed, 22 insertions(+), 1 deletion(-) + +diff --git a/acinclude.m4 b/acinclude.m4 +index 8353ca597..94b943622 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -942,6 +942,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) + AC_CHECK_LINUX_FUNC([__vfs_write], + [#include <linux/fs.h>], + [__vfs_write(NULL, NULL, 0, NULL);]) ++ AC_CHECK_LINUX_FUNC([kernel_write], ++ [#include <linux/fs.h>], ++ [kernel_write(NULL, NULL, 0, NULL);]) + AC_CHECK_LINUX_FUNC([bdi_init], + [#include <linux/backing-dev.h>], + [bdi_init(NULL);]) +diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h +index 9ebe9c178..9871535f0 100644 +--- a/src/afs/LINUX/osi_compat.h ++++ b/src/afs/LINUX/osi_compat.h +@@ -592,11 +592,21 @@ afs_d_invalidate(struct dentry *dp) + #endif + } + ++#if defined(HAVE_LINUX___VFS_WRITE) ++# define AFS_FILE_NEEDS_SET_FS 1 ++#elif defined(HAVE_LINUX_KERNEL_WRITE) ++/* #undef AFS_FILE_NEEDS_SET_FS */ ++#else ++# define AFS_FILE_NEEDS_SET_FS 1 ++#endif ++ + static inline int + afs_file_read(struct file *filp, char __user *buf, size_t len, loff_t *pos) + { + #if defined(HAVE_LINUX___VFS_WRITE) + return __vfs_read(filp, buf, len, pos); ++#elif defined(HAVE_LINUX_KERNEL_WRITE) ++ return kernel_read(filp, buf, len, pos); + #else + return filp->f_op->read(filp, buf, len, pos); + #endif +@@ -607,6 +617,8 @@ afs_file_write(struct file *filp, char __user *buf, size_t len, loff_t *pos) + { + #if defined(HAVE_LINUX___VFS_WRITE) + return __vfs_write(filp, buf, len, pos); ++#elif defined(HAVE_LINUX_KERNEL_WRITE) ++ return kernel_write(filp, buf, len, pos); + #else + return filp->f_op->write(filp, buf, len, pos); + #endif +diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c +index f889fd16b..a028ee740 100644 +--- a/src/afs/LINUX/osi_file.c ++++ b/src/afs/LINUX/osi_file.c +@@ -357,7 +357,9 @@ int + osi_rdwr(struct osi_file *osifile, struct uio *uiop, int rw) + { + struct file *filp = osifile->filp; ++#ifdef AFS_FILE_NEEDS_SET_FS + mm_segment_t old_fs = {0}; ++#endif /* AFS_FILE_NEEDS_SET_FS */ + int code = 0; + struct iovec *iov; + size_t count; +@@ -367,11 +369,13 @@ osi_rdwr(struct osi_file *osifile, struct uio *uiop, int rw) + savelim = current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur; + current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur = RLIM_INFINITY; + ++#ifdef AFS_FILE_NEEDS_SET_FS + if (uiop->uio_seg == AFS_UIOSYS) { + /* Switch into user space */ + old_fs = get_fs(); + set_fs(get_ds()); + } ++#endif /* AFS_FILE_NEEDS_SET_FS */ + + while (code == 0 && uiop->uio_resid > 0 && uiop->uio_iovcnt > 0) { + iov = uiop->uio_iov; +@@ -408,10 +412,12 @@ osi_rdwr(struct osi_file *osifile, struct uio *uiop, int rw) + code = 0; + } + ++#ifdef AFS_FILE_NEEDS_SET_FS + if (uiop->uio_seg == AFS_UIOSYS) { + /* Switch back into kernel space */ + set_fs(old_fs); + } ++#endif /* AFS_FILE_NEEDS_SET_FS */ + + current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur = savelim; + +diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c +index 3d9d71791..051452b34 100644 +--- a/src/afs/LINUX/osi_vnodeops.c ++++ b/src/afs/LINUX/osi_vnodeops.c +@@ -807,7 +807,7 @@ struct file_operations afs_file_fops = { + #ifdef STRUCT_FILE_OPERATIONS_HAS_READ_ITER + .read_iter = afs_linux_read_iter, + .write_iter = afs_linux_write_iter, +-# if !defined(HAVE_LINUX___VFS_WRITE) ++# if !defined(HAVE_LINUX___VFS_WRITE) && !defined(HAVE_LINUX_KERNEL_WRITE) + .read = new_sync_read, + .write = new_sync_write, + # endif +-- +2.15.0 + @@ -6,7 +6,7 @@ pkgname=openafs-modules _srcname=openafs pkgver=1.6.21.1 -pkgrel=1 +pkgrel=2 pkgdesc="Kernel module for OpenAFS" arch=('i686' 'x86_64' 'armv7h') url="http://www.openafs.org" @@ -16,10 +16,14 @@ makedepends=('linux-headers') conflicts=('openafs-features-libafs' 'openafs<1.6.6-2') options=(!emptydirs) source=(http://openafs.org/dl/${pkgver}/${_srcname}-${pkgver}-src.tar.bz2 - 0001-Correct-m4-conditionals-in-curses.m4.patch) + 0001-Correct-m4-conditionals-in-curses.m4.patch + 0002-Linux-Test-for-__vfs_write-rather-than-__vfs_read.patch + 0003-Linux-Use-kernel_read-kernel_write-when-__vfs-varian.patch) install=openafs-modules.install sha256sums=('aed896b0f598e3033e9ceb2a1eae24addff9ec0bb2d713ab63945a449ded3a5a' - '588cc4b220b7bd4783ffb44d9bfd490a67d1d4a58da20b952151fd842ca8f18d') + '250145d4abd704f739ade491e8d685873813a720b954f6c09a6186fb8662c415' + '28511f96c142eb918c4f92bf43427883f3f9eb32a8ea8a4de85b56c1b57957a4' + '4040a57c012498c06d60b678b072d6ce415f7b8b1a6fc01140b42c392515da36') # Heuristic to determine version of installed kernel # You can modify this if the heuristic fails @@ -32,6 +36,10 @@ prepare() { # Fix curses checks during configure (https://gerrit.openafs.org/12740/) patch -p1 < ${srcdir}/0001-Correct-m4-conditionals-in-curses.m4.patch + # Fix compatibility with Linux 4.14 + patch -p1 < ${srcdir}/0002-Linux-Test-for-__vfs_write-rather-than-__vfs_read.patch + patch -p1 < ${srcdir}/0003-Linux-Use-kernel_read-kernel_write-when-__vfs-varian.patch + # Only needed when changes to configure were made ./regen.sh -q } |