Index: trunk/server/common/patches/openafs-d_splice_alias-reference.patch
===================================================================
--- trunk/server/common/patches/openafs-d_splice_alias-reference.patch	(revision 2655)
+++ trunk/server/common/patches/openafs-d_splice_alias-reference.patch	(revision 2655)
@@ -0,0 +1,73 @@
+From 1c576fdf9f05c6af7b5b029ba010a76bed48488e Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.dionne@your-file-system.com>
+Date: Thu, 18 Dec 2014 08:43:22 -0500
+Subject: [PATCH] Linux: d_splice_alias may drop inode reference on error
+
+d_splice_alias now drops the inode reference on error, so we
+need to grab an extra one to make sure that the inode doesn't
+go away, and release it when done if there was no error.
+
+For kernels that may not drop the reference, provide an
+additional iput() within an ifdef.  This could be hooked up
+to a configure option to allow building a module for a kernel
+that is known not to drop the reference on error.  That hook
+is not provided here.  Affected kernels should be the early
+3.17 ones (3.17 - 3.17.2); 3.16 and older kernels should not
+return errors here.
+
+Change-Id: Id1786ac2227b4d8e0ae801fe59c15a0ecd975bed
+---
+ src/afs/LINUX/osi_vnodeops.c | 25 ++++++++++++++++++++++---
+ 1 file changed, 22 insertions(+), 3 deletions(-)
+
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index b2ab9d5..3723cf8 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -1612,6 +1612,13 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
+ 	ip->i_flags |= S_AUTOMOUNT;
+ #endif
+     }
++    /*
++     * Take an extra reference so the inode doesn't go away if
++     * d_splice_alias drops our reference on error.
++     */
++    if (ip)
++	igrab(ip);
++
+     newdp = d_splice_alias(ip, dp);
+ 
+  done:
+@@ -1625,14 +1632,26 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
+ 	 * d_splice_alias can return an error (EIO) if there is an existing
+ 	 * connected directory alias for this dentry.
+ 	 */
+-	if (!IS_ERR(newdp))
++	if (!IS_ERR(newdp)) {
++	    iput(ip);
+ 	    return newdp;
+-	else {
++	} else {
+ 	    d_add(dp, ip);
++	    /*
++	     * Depending on the kernel version, d_splice_alias may or may
++	     * not drop the inode reference on error.  If it didn't, do it
++	     * here.
++	     */
++#if defined(D_SPLICE_ALIAS_LEAK_ON_ERROR)
++	    iput(ip);
++#endif
+ 	    return NULL;
+ 	}
+-    } else
++    } else {
++	if (ip)
++	    iput(ip);
+ 	return ERR_PTR(afs_convert_code(code));
++    }
+ }
+ 
+ static int
+-- 
+2.2.1
+
Index: trunk/server/fedora/specs/openafs.spec.patch
===================================================================
--- trunk/server/fedora/specs/openafs.spec.patch	(revision 2654)
+++ trunk/server/fedora/specs/openafs.spec.patch	(revision 2655)
@@ -10,5 +10,5 @@
  %{!?fedorakmod: %define fedorakmod 1}
  %{!?build_dkmspkg: %define build_dkmspkg 1}
-@@ -249,9 +249,20 @@
+@@ -249,9 +249,21 @@
  %if %{build_modules}
  BuildRequires: kernel-devel
@@ -26,4 +26,5 @@
 +Patch1007: openafs-mvid-NULL-deref.patch
 +Patch1008: openafs-afs_conn-overcounts.patch
++Patch1009: openafs-d_splice_alias-reference.patch
 +%define _default_patch_fuzz 2
 +
@@ -96,5 +97,5 @@
  %else
  
-@@ -698,6 +712,16 @@
+@@ -698,6 +712,17 @@
  #%setup -q -n %{srcdir}
  %setup -q -b 1 -n %{srcdir}
@@ -109,4 +110,5 @@
 +%patch1007 -p1 -b .mvid-NULL-deref.patch
 +%patch1008 -p1 -b .afs_conn-overcounts.patch
++%patch1009 -p1 -b .d_splice_alias-reference
 +
  ##############################################################################
