mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-16 06:45:16 +01:00
add patches for openafs-client on kerel 3.17
This commit is contained in:
parent
a1f6d633f6
commit
1f284665fa
3 changed files with 105 additions and 0 deletions
|
@ -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));
|
||||
}
|
||||
|
|
@ -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
|
|
@ -14,6 +14,8 @@ stdenv.mkDerivation {
|
|||
patches = [
|
||||
./f3c0f74186f4a323ffc5f125d961fe384d396cac.patch
|
||||
./ae86b07f827d6f3e2032a412f5f6cb3951a27d2d.patch
|
||||
./I5558c64760e4cad2bd3dc648067d81020afc69b6.patch
|
||||
./If1fd9d27f795dee4b5aa2152dd09e0540d643a69.patch
|
||||
];
|
||||
|
||||
buildInputs = [ autoconf automake flex yacc ncurses perl which ];
|
||||
|
|
Loading…
Reference in a new issue