summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Stakenvicius <axs@gentoo.org>2013-09-05 20:10:46 +0000
committerIan Stakenvicius <axs@gentoo.org>2013-09-05 20:10:46 +0000
commitf4ea7947b300a7ade9dbe7d1ef209c2ae301570f (patch)
tree0fc04d3f18bbc083b3e18d0f8eec20c8d3de8ef3 /net-fs/openafs-kernel
parentRemove older version (diff)
downloadgentoo-2-f4ea7947b300a7ade9dbe7d1ef209c2ae301570f.tar.gz
gentoo-2-f4ea7947b300a7ade9dbe7d1ef209c2ae301570f.tar.bz2
gentoo-2-f4ea7947b300a7ade9dbe7d1ef209c2ae301570f.zip
committed revbump with patches to support 3.11 kernels, thanks to johnfg_
(Portage version: 2.1.12.2/cvs/Linux x86_64, signed Manifest commit with key 2B6559ED)
Diffstat (limited to 'net-fs/openafs-kernel')
-rw-r--r--net-fs/openafs-kernel/ChangeLog9
-rw-r--r--net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-1.patch102
-rw-r--r--net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-2.patch99
-rw-r--r--net-fs/openafs-kernel/openafs-kernel-1.6.5-r2.ebuild92
4 files changed, 301 insertions, 1 deletions
diff --git a/net-fs/openafs-kernel/ChangeLog b/net-fs/openafs-kernel/ChangeLog
index 936b5784b64a..ae8ce9bf1ee0 100644
--- a/net-fs/openafs-kernel/ChangeLog
+++ b/net-fs/openafs-kernel/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for net-fs/openafs-kernel
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-fs/openafs-kernel/ChangeLog,v 1.159 2013/09/03 13:43:45 vincent Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-fs/openafs-kernel/ChangeLog,v 1.160 2013/09/05 20:10:46 axs Exp $
+
+*openafs-kernel-1.6.5-r2 (05 Sep 2013)
+
+ 05 Sep 2013; Ian Stakenvicius <axs@gentoo.org>
+ +files/openafs-1.6.5-kernel-3.11-1.patch,
+ +files/openafs-1.6.5-kernel-3.11-2.patch, +openafs-kernel-1.6.5-r2.ebuild:
+ committed revbump with patches to support 3.11 kernels, thanks to johnfg_
03 Sep 2013; Vicente Olivert Riera <vincent@gentoo.org>
openafs-kernel-1.6.5-r1.ebuild:
diff --git a/net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-1.patch b/net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-1.patch
new file mode 100644
index 000000000000..5047b1f4ecee
--- /dev/null
+++ b/net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-1.patch
@@ -0,0 +1,102 @@
+From 8563077e818d62a3c764caf8818d8bf24a3cb0b6 Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.dionne@your-file-system.com>
+Date: Mon, 8 Jul 2013 10:53:00 -0400
+Subject: [PATCH] Linux 3.11: Convert from readdir to iterate file operation
+
+Convert the readdir function so that it can be used as the new
+"iterate" file operation. This new operation is passed a context
+that contains a pointer to the filldir function and the offset.
+The context is passed into the new dir_emit function that will
+call the function specified by the context.
+
+The new dir_emit function returns true on success, so we must be
+careful about how we check for failure since this is different
+behaviour from what filldir currently does.
+
+Change-Id: I6b01b4c78a501bdf4f8d583b0d3b94d677c5d541
+---
+ acinclude.m4 | 1 +
+ src/afs/LINUX/osi_vnodeops.c | 22 ++++++++++++++++++++++
+ 2 files changed, 23 insertions(+), 0 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 6ffb686..15b5ad8 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -842,6 +842,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ AC_CHECK_LINUX_STRUCT([inode], [i_mutex], [fs.h])
+ AC_CHECK_LINUX_STRUCT([inode], [i_security], [fs.h])
+ AC_CHECK_LINUX_STRUCT([file_operations], [flock], [fs.h])
++ AC_CHECK_LINUX_STRUCT([file_operations], [iterate], [fs.h])
+ AC_CHECK_LINUX_STRUCT([file_operations], [sendfile], [fs.h])
+ AC_CHECK_LINUX_STRUCT([file_system_type], [mount], [fs.h])
+ AC_CHECK_LINUX_STRUCT([filename], [name], [fs.h])
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index 46fbb88..25cbac2 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -271,7 +271,11 @@ extern int BlobScan(struct dcache * afile, afs_int32 ablob);
+ * handling and use of bulkstats will need to be reflected here as well.
+ */
+ static int
++#if defined(STRUCT_FILE_OPERATIONS_HAS_ITERATE)
++afs_linux_readdir(struct file *fp, struct dir_context *ctx)
++#else
+ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
++#endif
+ {
+ struct vcache *avc = VTOAFS(FILE_INODE(fp));
+ struct vrequest treq;
+@@ -350,7 +354,11 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
+ * takes an offset in units of blobs, rather than bytes.
+ */
+ code = 0;
++#if defined(STRUCT_FILE_OPERATIONS_HAS_ITERATE)
++ offset = ctx->pos;
++#else
+ offset = (int) fp->f_pos;
++#endif
+ while (1) {
+ dirpos = BlobScan(tdc, offset);
+ if (!dirpos)
+@@ -408,7 +416,13 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
+ * holding the GLOCK.
+ */
+ AFS_GUNLOCK();
++#if defined(STRUCT_FILE_OPERATIONS_HAS_ITERATE)
++ /* dir_emit returns a bool - true when it succeeds.
++ * Inverse the result to fit with how we check "code" */
++ code = !dir_emit(ctx, de->name, len, ino, type);
++#else
+ code = (*filldir) (dirbuf, de->name, len, offset, ino, type);
++#endif
+ AFS_GLOCK();
+ }
+ DRelease(&entry, 0);
+@@ -419,7 +433,11 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
+ /* If filldir didn't fill in the last one this is still pointing to that
+ * last attempt.
+ */
++#if defined(STRUCT_FILE_OPERATIONS_HAS_ITERATE)
++ ctx->pos = (loff_t) offset;
++#else
+ fp->f_pos = (loff_t) offset;
++#endif
+
+ ReleaseReadLock(&tdc->lock);
+ afs_PutDCache(tdc);
+@@ -748,7 +766,11 @@ out:
+
+ struct file_operations afs_dir_fops = {
+ .read = generic_read_dir,
++#if defined(STRUCT_FILE_OPERATIONS_HAS_ITERATE)
++ .iterate = afs_linux_readdir,
++#else
+ .readdir = afs_linux_readdir,
++#endif
+ #ifdef HAVE_UNLOCKED_IOCTL
+ .unlocked_ioctl = afs_unlocked_xioctl,
+ #else
+--
+1.7.2.5
+
diff --git a/net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-2.patch b/net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-2.patch
new file mode 100644
index 000000000000..3ffddf083e24
--- /dev/null
+++ b/net-fs/openafs-kernel/files/openafs-1.6.5-kernel-3.11-2.patch
@@ -0,0 +1,99 @@
+From 6482f944119254da9cdea533d7ca89d3d46f0559 Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.dionne@your-file-system.com>
+Date: Tue, 3 Sep 2013 07:55:14 -0400
+Subject: [PATCH] Linux 3.11: Adapt to d_count changes
+
+In preparation for upcoming changes in the 3.12 cycle, d_lockref
+was introduced late in the 3.11 cycle. The dentry's d_lock and
+d_count are moved to this new structure. A new d_lock macro makes
+the change transparent for locking, but direct users of d_count
+must adapt. A new d_count() helper function is provided and
+should now be used.
+
+Use the new d_count() helper function if available, and move
+some of the ifdef logic into a helper compatibility function.
+
+Change-Id: I32a21a174d763fb7df8f1e04da3bb7260684571d
+---
+ acinclude.m4 | 3 +++
+ src/afs/LINUX/osi_compat.h | 28 ++++++++++++++++++++++++++++
+ src/afs/LINUX/osi_vnodeops.c | 12 +-----------
+ 3 files changed, 32 insertions(+), 11 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 15b5ad8..800333b 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -897,6 +897,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ AC_CHECK_LINUX_FUNC([d_alloc_anon],
+ [#include <linux/fs.h>],
+ [d_alloc_anon(NULL);])
++ AC_CHECK_LINUX_FUNC([d_count],
++ [#include <linux/dcache.h>],
++ [d_count(NULL);])
+ AC_CHECK_LINUX_FUNC([d_make_root],
+ [#include <linux/fs.h>],
+ [d_make_root(NULL);])
+diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
+index ce9178e..fdddf59 100644
+--- a/src/afs/LINUX/osi_compat.h
++++ b/src/afs/LINUX/osi_compat.h
+@@ -608,4 +608,32 @@ afs_proc_create(char *name, umode_t mode, struct proc_dir_entry *parent, struct
+ #endif
+ }
+
++static inline int
++afs_dentry_count(struct dentry *dp)
++{
++#if defined(HAVE_LINUX_D_COUNT)
++ return d_count(dp);
++#elif defined(D_COUNT_INT)
++ return dp->d_count;
++#else
++ return atomic_read(&dp->d_count);
++#endif
++}
++
++static inline void
++afs_maybe_shrink_dcache(struct dentry *dp)
++{
++#if defined(HAVE_LINUX_D_COUNT) || defined(D_COUNT_INT)
++ spin_lock(&dp->d_lock);
++ if (afs_dentry_count(dp) > 1) {
++ spin_unlock(&dp->d_lock);
++ shrink_dcache_parent(dp);
++ } else
++ spin_unlock(&dp->d_lock);
++#else
++ if (afs_dentry_count(dp) > 1)
++ shrink_dcache_parent(dp);
++#endif
++}
++
+ #endif /* AFS_LINUX_OSI_COMPAT_H */
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index e9191ae..a60027e 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -1684,17 +1684,7 @@ afs_linux_rename(struct inode *oldip, struct dentry *olddp,
+ rehash = newdp;
+ }
+
+-#if defined(D_COUNT_INT)
+- spin_lock(&olddp->d_lock);
+- if (olddp->d_count > 1) {
+- spin_unlock(&olddp->d_lock);
+- shrink_dcache_parent(olddp);
+- } else
+- spin_unlock(&olddp->d_lock);
+-#else
+- if (atomic_read(&olddp->d_count) > 1)
+- shrink_dcache_parent(olddp);
+-#endif
++ afs_maybe_shrink_dcache(olddp);
+
+ AFS_GLOCK();
+ code = afs_rename(VTOAFS(oldip), (char *)oldname, VTOAFS(newip), (char *)newname, credp);
+--
+1.7.2.5
+
diff --git a/net-fs/openafs-kernel/openafs-kernel-1.6.5-r2.ebuild b/net-fs/openafs-kernel/openafs-kernel-1.6.5-r2.ebuild
new file mode 100644
index 000000000000..a99ab2698173
--- /dev/null
+++ b/net-fs/openafs-kernel/openafs-kernel-1.6.5-r2.ebuild
@@ -0,0 +1,92 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-fs/openafs-kernel/openafs-kernel-1.6.5-r2.ebuild,v 1.1 2013/09/05 20:10:46 axs Exp $
+
+EAPI="5"
+
+inherit autotools eutils multilib linux-mod versionator toolchain-funcs
+
+MY_PV=$(delete_version_separator '_')
+MY_PN=${PN/-kernel}
+MY_P2="${MY_PN}-${PV}"
+MY_P="${MY_PN}-${MY_PV}"
+PVER="1"
+DESCRIPTION="The OpenAFS distributed file system kernel module"
+HOMEPAGE="http://www.openafs.org/"
+# We always d/l the doc tarball as man pages are not USE=doc material
+SRC_URI="http://openafs.org/dl/openafs/${MY_PV}/${MY_P}-src.tar.bz2
+ mirror://gentoo/${MY_P2}-patches-${PVER}.tar.bz2"
+
+LICENSE="IBM BSD openafs-krb5-a APSL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux"
+IUSE=""
+
+S=${WORKDIR}/${MY_P}
+
+CONFIG_CHECK="!DEBUG_RODATA ~!AFS_FS KEYS"
+ERROR_DEBUG_RODATA="OpenAFS is incompatible with linux' CONFIG_DEBUG_RODATA option"
+ERROR_AFS_FS="OpenAFS conflicts with the in-kernel AFS-support. Make sure not to load both at the same time!"
+ERROR_KEYS="OpenAFS needs CONFIG_KEYS option enabled"
+
+QA_TEXTRELS_x86_fbsd="/boot/modules/libafs.ko"
+QA_TEXTRELS_amd64_fbsd="/boot/modules/libafs.ko"
+
+pkg_setup() {
+ if use kernel_linux; then
+ linux-mod_pkg_setup
+ fi
+}
+
+src_prepare() {
+ EPATCH_EXCLUDE="012_all_kbuild.patch" \
+ EPATCH_SUFFIX="patch" \
+ epatch "${WORKDIR}"/gentoo/patches
+ epatch "${FILESDIR}"/${P/-kernel/}-kernel-3.11-{1..2}.patch
+
+ # packaging is f-ed up, so we can't run eautoreconf
+ # run autotools commands based on what is listed in regen.sh
+ eaclocal -I src/cf
+ eautoconf
+ eautoconf -o configure-libafs configure-libafs.ac
+ eautoheader
+ einfo "Deleting autom4te.cache directory"
+ rm -rf autom4te.cache
+}
+
+src_configure() {
+ ARCH="$(tc-arch-kernel)" \
+ econf \
+ --with-linux-kernel-headers=${KV_DIR} \
+ --with-linux-kernel-build=${KV_OUT_DIR}
+}
+
+src_compile() {
+ ARCH="$(tc-arch-kernel)" AR="$(tc-getAR)" emake V=1 -j1 only_libafs || die
+}
+
+src_install() {
+ if use kernel_linux; then
+ local srcdir=$(expr "${S}"/src/libafs/MODLOAD-*)
+ [[ -f ${srcdir}/libafs.${KV_OBJ} ]] || die "Couldn't find compiled kernel module"
+
+ MODULE_NAMES="libafs(fs/openafs:${srcdir})"
+
+ linux-mod_src_install
+ elif use kernel_FreeBSD; then
+ insinto /boot/modules
+ doins "${S}"/src/libafs/MODLOAD/libafs.ko
+ fi
+}
+
+pkg_postinst() {
+ # Update linker.hints file
+ use kernel_FreeBSD && /usr/sbin/kldxref "${EPREFIX}/boot/modules"
+ use kernel_linux && linux-mod_pkg_postinst
+}
+
+pkg_postrm() {
+ # Update linker.hints file
+ use kernel_FreeBSD && /usr/sbin/kldxref "${EPREFIX}/boot/modules"
+ use kernel_linux && linux-mod_pkg_postrm
+}