add patches for openafs-client on kerel 3.17

This commit is contained in:
Domen Kožar 2014-10-09 13:12:29 +02:00
parent a1f6d633f6
commit 1f284665fa
3 changed files with 105 additions and 0 deletions

View file

@ -0,0 +1,48 @@
From: Marc Dionne <marc.dionne@your-file-system.com>
Date: Thu, 25 Sep 2014 10:52:12 +0000 (-0300)
Subject: Linux 3.17: Deal with d_splice_alias errors
X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=af7f1d59135526ea584a4403b6400106dc92a992;hp=880401913d6190054bb0511093606a206b16326c
Linux 3.17: Deal with d_splice_alias errors
In 3.17 the logic in d_splice_alias has changed. Of interest to
us is the fact that it will now return an EIO error if it finds
an existing connected directory for the dentry, where it would
previously have added a new alias for it. As a result the end
user can get EIO errors when accessing any file in a volume
if the volume was first accessed through a different path (ex:
RO path vs RW path).
This commit just restores the old behaviour, adding the directory
alias manually in the error case, which is what older versions
of d_splice_alias used to do.
Change-Id: I5558c64760e4cad2bd3dc648067d81020afc69b6
---
diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
index e03187f..0cdd9e0 100644
--- a/src/afs/LINUX/osi_vnodeops.c
+++ b/src/afs/LINUX/osi_vnodeops.c
@@ -1593,9 +1593,18 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
/* It's ok for the file to not be found. That's noted by the caller by
* seeing that the dp->d_inode field is NULL.
*/
- if (!code || code == ENOENT)
- return newdp;
- else
+ if (!code || code == ENOENT) {
+ /*
+ * d_splice_alias can return an error (EIO) if there is an existing
+ * connected directory alias for this dentry.
+ */
+ if (!IS_ERR(newdp))
+ return newdp;
+ else {
+ d_add(dp, ip);
+ return NULL;
+ }
+ } else
return ERR_PTR(afs_convert_code(code));
}

View file

@ -0,0 +1,55 @@
From 880401913d6190054bb0511093606a206b16326c Mon Sep 17 00:00:00 2001
From: Marc Dionne <marc.dionne@your-file-system.com>
Date: Tue, 9 Sep 2014 10:39:55 -0300
Subject: [PATCH] Linux 3.17: No more typedef for ctl_table
The typedef has been removed so we need to use the structure
directly.
Note that the API for register_sysctl_table has also changed
with 3.17, but it reverted back to a form that existed
before and the configure tests handle it correctly.
Change-Id: If1fd9d27f795dee4b5aa2152dd09e0540d643a69
---
src/afs/LINUX/osi_sysctl.c | 4 ++--
src/cf/linux-test4.m4 | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/afs/LINUX/osi_sysctl.c b/src/afs/LINUX/osi_sysctl.c
index a8f7fac..834e8ad 100644
--- a/src/afs/LINUX/osi_sysctl.c
+++ b/src/afs/LINUX/osi_sysctl.c
@@ -34,7 +34,7 @@ extern afs_int32 afs_pct2;
#ifdef CONFIG_SYSCTL
static struct ctl_table_header *afs_sysctl = NULL;
-static ctl_table afs_sysctl_table[] = {
+static struct ctl_table afs_sysctl_table[] = {
{
#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
#if defined(CTL_UNNUMBERED)
@@ -234,7 +234,7 @@ static ctl_table afs_sysctl_table[] = {
{0}
};
-static ctl_table fs_sysctl_table[] = {
+static struct ctl_table fs_sysctl_table[] = {
{
#if defined(STRUCT_CTL_TABLE_HAS_CTL_NAME)
#if defined(CTL_UNNUMBERED)
diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
index dad91d9..228b491 100644
--- a/src/cf/linux-test4.m4
+++ b/src/cf/linux-test4.m4
@@ -395,7 +395,7 @@ AC_DEFUN([LINUX_REGISTER_SYSCTL_TABLE_NOFLAG], [
AC_CHECK_LINUX_BUILD([whether register_sysctl_table has an insert_at_head argument],
[ac_cv_linux_register_sysctl_table_noflag],
[#include <linux/sysctl.h>],
- [ctl_table *t; register_sysctl_table (t);],
+ [struct ctl_table *t; register_sysctl_table (t);],
[REGISTER_SYSCTL_TABLE_NOFLAG],
[define if register_sysctl_table has no insert_at head flag],
[])
--
1.7.1

View file

@ -14,6 +14,8 @@ stdenv.mkDerivation {
patches = [
./f3c0f74186f4a323ffc5f125d961fe384d396cac.patch
./ae86b07f827d6f3e2032a412f5f6cb3951a27d2d.patch
./I5558c64760e4cad2bd3dc648067d81020afc69b6.patch
./If1fd9d27f795dee4b5aa2152dd09e0540d643a69.patch
];
buildInputs = [ autoconf automake flex yacc ncurses perl which ];