summarylogtreecommitdiffstats
path: root/0003-Linux-4.5-get_link-instead-of-follow_link-put_link.patch
diff options
context:
space:
mode:
Diffstat (limited to '0003-Linux-4.5-get_link-instead-of-follow_link-put_link.patch')
-rw-r--r--0003-Linux-4.5-get_link-instead-of-follow_link-put_link.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/0003-Linux-4.5-get_link-instead-of-follow_link-put_link.patch b/0003-Linux-4.5-get_link-instead-of-follow_link-put_link.patch
new file mode 100644
index 000000000000..15be91bebe8a
--- /dev/null
+++ b/0003-Linux-4.5-get_link-instead-of-follow_link-put_link.patch
@@ -0,0 +1,80 @@
+From 97591edd99583f460d61cece34f9e2173ea637fb Mon Sep 17 00:00:00 2001
+From: Chaskiel Grundman <cg2v@andrew.cmu.edu>
+Date: Thu, 5 May 2016 12:35:08 -0400
+Subject: [PATCH 3/5] Linux 4.5: get_link instead of follow_link+put_link
+
+In linux commit 6b255391, the follow_link inode operation was
+replaced by the get_link operation, which is basically the same
+but takes the inode and dentry separately, allowing for the
+possibility of staying in RCU mode.
+
+For now, only support this if page_get_link is available and we are
+using the USABLE_KERNEL_PAGE_SYMLINK_CACHE
+
+The previous test for USABLE_KERNEL_PAGE_SYMLINK_CACHE used a bogus,
+undefined configure variable (ac_cv_linux_kernel_page_follow_link).
+Remove it, as it was not needed
+
+Change-Id: I2d7851d31dd4b1b944b16fad611addb804930eca
+---
+ acinclude.m4 | 10 +++++++++-
+ src/afs/LINUX/osi_vnodeops.c | 4 +++-
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index c8a7ceb..aca1316 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -890,6 +890,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ AC_CHECK_LINUX_STRUCT([file_operations], [sendfile], [fs.h])
+ AC_CHECK_LINUX_STRUCT([file_system_type], [mount], [fs.h])
+ AC_CHECK_LINUX_STRUCT([inode_operations], [truncate], [fs.h])
++ AC_CHECK_LINUX_STRUCT([inode_operations], [get_link], [fs.h])
+ AC_CHECK_LINUX_STRUCT([key], [payload.value], [key.h])
+ AC_CHECK_LINUX_STRUCT([key_type], [instantiate_prep], [key-type.h])
+ AC_CHECK_LINUX_STRUCT([key_type], [match_preparse], [key-type.h])
+@@ -990,6 +991,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ AC_CHECK_LINUX_FUNC([page_follow_link],
+ [#include <linux/fs.h>],
+ [page_follow_link(0,0);])
++ AC_CHECK_LINUX_FUNC([page_get_link],
++ [#include <linux/fs.h>],
++ [page_get_link(0,0,0);])
+ AC_CHECK_LINUX_FUNC([page_offset],
+ [#include <linux/pagemap.h>],
+ [page_offset(NULL);])
+@@ -1168,11 +1172,15 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ if test -f "$LINUX_KERNEL_PATH/include/linux/mm_inline.h"; then
+ AC_DEFINE(HAVE_MM_INLINE_H, 1, [define if you have mm_inline.h header file])
+ fi
+- if test "x$ac_cv_linux_kernel_page_follow_link" = "xyes" -o "x$ac_cv_linux_func_i_put_link_takes_cookie" = "xyes"; then
++ if test "x$ac_cv_linux_func_page_get_link" = "xyes" -o "x$ac_cv_linux_func_i_put_link_takes_cookie" = "xyes"; then
+ AC_DEFINE(USABLE_KERNEL_PAGE_SYMLINK_CACHE, 1, [define if your kernel has a usable symlink cache API])
+ else
+ AC_MSG_WARN([your kernel does not have a usable symlink cache API])
+ fi
++ if test "x$ac_cv_linux_func_page_get_link" != "xyes" -a "x$ac_cv_linux_struct_inode_operations_has_get_link" = "xyes"; then
++ AC_MSG_ERROR([Your kernel does not use follow_link - not supported without symlink cache API])
++ exit 1
++ fi
+ :
+ fi
+ if test "x$enable_linux_d_splice_alias_extra_iput" = xyes; then
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index 2f753dd..00b41ef 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -3108,7 +3108,9 @@ static struct address_space_operations afs_symlink_aops = {
+ static struct inode_operations afs_symlink_iops = {
+ #if defined(USABLE_KERNEL_PAGE_SYMLINK_CACHE)
+ .readlink = page_readlink,
+-# if defined(HAVE_LINUX_PAGE_FOLLOW_LINK)
++# if defined(HAVE_LINUX_PAGE_GET_LINK)
++ .get_link = page_get_link,
++# elif defined(HAVE_LINUX_PAGE_FOLLOW_LINK)
+ .follow_link = page_follow_link,
+ # else
+ .follow_link = page_follow_link_light,
+--
+2.8.2
+