rpms/openafs-kmod/F-18 openafs-1.6.2-Linux-3.8-session_keyring-changes.patch, NONE, 1.1 openafs-1.6.2-Linux-3.8-vmtruncate-removal.patch, NONE, 1.1 openafs-1.6.2-Linux-Detect-undefined-symbols-in-kernel-modules.patch, NONE, 1.1 openafs-1.6.2-Linux-setpag-may-replace-credentials.patch, NONE, 1.1 openafs-kmod.spec, 1.45, 1.46

Ken Dreyer ktdreyer at rpmfusion.org
Mon Mar 4 02:17:17 CET 2013


Author: ktdreyer

Update of /cvs/free/rpms/openafs-kmod/F-18
In directory old02.ovh.rpmfusion.lan:/tmp/cvs-serv31425

Modified Files:
	openafs-kmod.spec 
Added Files:
	openafs-1.6.2-Linux-3.8-session_keyring-changes.patch 
	openafs-1.6.2-Linux-3.8-vmtruncate-removal.patch 
	openafs-1.6.2-Linux-Detect-undefined-symbols-in-kernel-modules.patch 
	openafs-1.6.2-Linux-setpag-may-replace-credentials.patch 
Log Message:
* Sat Mar 02 2013 Ken Dreyer <ktdreyer at ktdreyer.com> - 1.6.2-3
- Add patches to support kernel 3.8


openafs-1.6.2-Linux-3.8-session_keyring-changes.patch:
 acinclude.m4                |    1 +
 src/afs/LINUX/osi_compat.h  |   34 ++++++++++++++++++++++++++++++++--
 src/afs/LINUX/osi_groups.c  |    9 ++-------
 src/afs/LINUX/osi_machdep.h |   10 +++++++---
 4 files changed, 42 insertions(+), 12 deletions(-)

--- NEW FILE openafs-1.6.2-Linux-3.8-session_keyring-changes.patch ---
>From afa2df4059d30232c310269d9030adbe762b5896 Mon Sep 17 00:00:00 2001
From: Marc Dionne <marc.c.dionne at gmail.com>
Date: Wed, 9 Jan 2013 19:26:54 -0500
Subject: [PATCH 1/4] Linux 3.8: session_keyring changes

The session_keyring is now attached directly to the cred structure
and the thread_group_cred structure (cred->tgcred) no longer exists.

Adapt code that makes use of tgcred, and use the standard rcu based
mechanism to update session_keyring.

Reviewed-on: http://gerrit.openafs.org/8905
Reviewed-by: Andrew Deason <adeason at sinenomine.net>
Tested-by: BuildBot <buildbot at rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow at your-file-system.com>
(cherry picked from commit c6d27e322a8d3b352554650473a048235a9c763a)

Change-Id: If0998ee777ab0d196e19162499eb3ee60c5ff85d
---
 acinclude.m4                |  1 +
 src/afs/LINUX/osi_compat.h  | 34 ++++++++++++++++++++++++++++++++--
 src/afs/LINUX/osi_groups.c  |  9 ++-------
 src/afs/LINUX/osi_machdep.h |  9 +++++++--
 4 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/acinclude.m4 b/acinclude.m4
index 8c57779..0a05caa 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -812,6 +812,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
 				       [write_begin], [fs.h])
 		 AC_CHECK_LINUX_STRUCT([backing_dev_info], [name],
 				       [backing-dev.h])
+		 AC_CHECK_LINUX_STRUCT([cred], [session_keyring], [cred.h])
 		 AC_CHECK_LINUX_STRUCT([ctl_table], [ctl_name], [sysctl.h])
 		 AC_CHECK_LINUX_STRUCT([dentry_operations], [d_automount], [dcache.h])
 		 AC_CHECK_LINUX_STRUCT([inode], [i_alloc_sem], [fs.h])
diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
index 2dda136..a777542 100644
--- a/src/afs/LINUX/osi_compat.h
+++ b/src/afs/LINUX/osi_compat.h
@@ -186,14 +186,24 @@ afs_linux_key_alloc(struct key_type *type, const char *desc, uid_t uid,
 }
 
 # if defined(STRUCT_TASK_STRUCT_HAS_CRED)
+static inline struct key *
+afs_session_keyring(afs_ucred_t *cred)
+{
+#  if defined(STRUCT_CRED_HAS_SESSION_KEYRING)
+    return cred->session_keyring;
+#  else
+    return cred->tgcred->session_keyring;
+#  endif
+}
+
 static inline struct key*
 afs_linux_search_keyring(afs_ucred_t *cred, struct key_type *type)
 {
     key_ref_t key_ref;
 
-    if (cred->tgcred->session_keyring) {
+    if (afs_session_keyring(cred)) {
 	key_ref = keyring_search(
-		      make_key_ref(cred->tgcred->session_keyring, 1),
+		      make_key_ref(afs_session_keyring(cred), 1),
 		      type, "_pag");
 	if (IS_ERR(key_ref))
 	    return ERR_CAST(key_ref);
@@ -507,4 +517,24 @@ afs_set_name(afs_name_t aname, char *string) {
 }
 #endif
 
+static_inline struct key *
+afs_set_session_keyring(struct key *keyring)
+{
+    struct key *old;
+#if defined(STRUCT_CRED_HAS_SESSION_KEYRING)
+    struct cred *new_creds;
+    old = current_session_keyring();
+    new_creds = prepare_creds();
+    rcu_assign_pointer(new_creds->session_keyring, keyring);
+    commit_creds(new_creds);
+#else
+    spin_lock_irq(&current->sighand->siglock);
+    old = task_session_keyring(current);
+    smp_wmb();
+    task_session_keyring(current) = keyring;
+    spin_unlock_irq(&current->sighand->siglock);
+#endif
+    return old;
+}
+
 #endif /* AFS_LINUX_OSI_COMPAT_H */
diff --git a/src/afs/LINUX/osi_groups.c b/src/afs/LINUX/osi_groups.c
index c2a0308..e351344 100644
--- a/src/afs/LINUX/osi_groups.c
+++ b/src/afs/LINUX/osi_groups.c
@@ -214,14 +214,9 @@ install_session_keyring(struct key *keyring)
     }
 
     /* install the keyring */
-    spin_lock_irq(&current->sighand->siglock);
-    old = task_session_keyring(current);
-    smp_wmb();
-    task_session_keyring(current) = keyring;
-    spin_unlock_irq(&current->sighand->siglock);
-
+    old = afs_set_session_keyring(keyring);
     if (old)
-	    key_put(old);
+	key_put(old);
 
 out:
     return code;
diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h
index a2c16f5..4a02208 100644
--- a/src/afs/LINUX/osi_machdep.h
+++ b/src/afs/LINUX/osi_machdep.h
@@ -179,8 +179,13 @@ afs_set_cr_group_info(cred_t *cred, struct group_info *group_info) {
 #define current_group_info() (current->cred->group_info)
 #define task_gid(task) (task->cred->gid)
 #define task_user(task) (task->cred->user)
-#define task_session_keyring(task) (task->cred->tgcred->session_keyring)
-#define current_session_keyring() (current->cred->tgcred->session_keyring)
+#if defined(STRUCT_CRED_HAS_SESSION_KEYRING)
+# define task_session_keyring(task) (task->cred->session_keyring)
+# define current_session_keyring() (current->cred->session_keyring)
+#else
+# define task_session_keyring(task) (task->cred->tgcred->session_keyring)
+# define current_session_keyring() (current->cred->tgcred->session_keyring)
+#endif
 
 #else
 
-- 
1.7.11.7


openafs-1.6.2-Linux-3.8-vmtruncate-removal.patch:
 acinclude.m4               |    1 +
 src/afs/LINUX/osi_compat.h |   14 ++++++++++++++
 src/afs/LINUX/osi_vm.c     |    6 ++----
 3 files changed, 17 insertions(+), 4 deletions(-)

--- NEW FILE openafs-1.6.2-Linux-3.8-vmtruncate-removal.patch ---
>From 13b51369ccf13a2ec9157faa1212892d6e712a5c Mon Sep 17 00:00:00 2001
From: Marc Dionne <marc.c.dionne at gmail.com>
Date: Wed, 9 Jan 2013 21:22:27 -0500
Subject: [PATCH 2/4] Linux 3.8: vmtruncate removal

vmtruncate had been deprecated for a while and has now been
removed.  Do things the new way based on truncate_setsize.

Reviewed-on: http://gerrit.openafs.org/8906
Reviewed-by: Chas Williams - CONTRACTOR <chas at cmf.nrl.navy.mil>
Tested-by: BuildBot <buildbot at rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow at your-file-system.com>
(cherry picked from commit d0479bbaf43900d6733c3f7517926ee9813c9610)

Change-Id: Iafc64e19544dec9fcaefad5ad274eac4133f4083
---
 acinclude.m4               |  1 +
 src/afs/LINUX/osi_compat.h | 14 ++++++++++++++
 src/afs/LINUX/osi_vm.c     |  5 ++---
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/acinclude.m4 b/acinclude.m4
index 0a05caa..4223bb1 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -824,6 +824,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([filename], [name], [fs.h])
+		 AC_CHECK_LINUX_STRUCT([inode_operations], [truncate], [fs.h])
 		 AC_CHECK_LINUX_STRUCT([key_type], [preparse], [key-type.h])
 		 AC_CHECK_LINUX_STRUCT([nameidata], [path], [namei.h])
 		 AC_CHECK_LINUX_STRUCT([proc_dir_entry], [owner], [proc_fs.h])
diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
index a777542..e8bf003 100644
--- a/src/afs/LINUX/osi_compat.h
+++ b/src/afs/LINUX/osi_compat.h
@@ -537,4 +537,18 @@ afs_set_session_keyring(struct key *keyring)
     return old;
 }
 
+static inline int
+afs_truncate(struct inode *inode, int len)
+{
+    int code;
+#if defined(STRUCT_INODE_OPERATIONS_HAS_TRUNCATE)
+    code = vmtruncate(inode, len);
+#else
+    code = inode_newsize_ok(inode, len);
+    if (!code)
+        truncate_setsize(inode, len);
+#endif
+    return code;
+}
+
 #endif /* AFS_LINUX_OSI_COMPAT_H */
diff --git a/src/afs/LINUX/osi_vm.c b/src/afs/LINUX/osi_vm.c
index 2cd34f9..8bc792e 100644
--- a/src/afs/LINUX/osi_vm.c
+++ b/src/afs/LINUX/osi_vm.c
@@ -51,8 +51,7 @@ osi_VM_FlushVCache(struct vcache *avc, int *slept)
     if (avc->opens != 0)
 	return EBUSY;
 
-    return vmtruncate(ip, 0);
-    return 0;
+    return afs_truncate(ip, 0);
 }
 
 /* Try to invalidate pages, for "fs flush" or "fs flushv"; or
@@ -132,5 +131,5 @@ osi_VM_FlushPages(struct vcache *avc, afs_ucred_t *credp)
 void
 osi_VM_Truncate(struct vcache *avc, int alen, afs_ucred_t *acred)
 {
-    vmtruncate(AFSTOV(avc), alen);
+    afs_truncate(AFSTOV(avc), alen);
 }
-- 
1.7.11.7


openafs-1.6.2-Linux-Detect-undefined-symbols-in-kernel-modules.patch:
 .gitignore             |    1 +
 MakefileProto.LINUX.in |   11 +++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

--- NEW FILE openafs-1.6.2-Linux-Detect-undefined-symbols-in-kernel-modules.patch ---
>From 21b6b49bffe6a4e1130ef099ac9acc31d1343fc5 Mon Sep 17 00:00:00 2001
From: Marc Dionne <marc.c.dionne at gmail.com>
Date: Sun, 27 Jan 2013 20:52:39 -0500
Subject: [PATCH 4/4] Linux: Detect undefined symbols in kernel modules

Undefined symbols in the kernel modules are not currently detected
at build time.  As a result, buildbot may indicate success while
the resulting kernel modules are unusable.

In the kernel build process, modpost warns about missing symbols
but does not return an error in the case of external modules.
Detect these warnings and cause the libafs build to fail.

Reviewed-on: http://gerrit.openafs.org/8981
Tested-by: BuildBot <buildbot at rampaginggeek.com>
Reviewed-by: Simon Wilkinson <simonxwilkinson at gmail.com>
Reviewed-by: Derrick Brashear <shadow at your-file-system.com>
(cherry picked from commit dbdee60a83d72d38a04a0eeb2a5324cf497e57e3)

Change-Id: If28b97b6ce53b0feef2464a56fd7a48443c973ae
---
 src/libafs/.gitignore             |  1 +
 src/libafs/MakefileProto.LINUX.in | 10 +++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/libafs/.gitignore b/src/libafs/.gitignore
index d87f88a..225e979 100644
--- a/src/libafs/.gitignore
+++ b/src/libafs/.gitignore
@@ -26,3 +26,4 @@
 /rpc
 /sys
 /rx
+/.makelog
diff --git a/src/libafs/MakefileProto.LINUX.in b/src/libafs/MakefileProto.LINUX.in
index 63b2f35..9449360 100644
--- a/src/libafs/MakefileProto.LINUX.in
+++ b/src/libafs/MakefileProto.LINUX.in
@@ -19,6 +19,8 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 
+AFS_OS_CLEAN = .makelog
+
 # OS specific object files:
 AFS_OS_OBJS = \
 	osi_alloc.o \
@@ -338,7 +340,13 @@ ${LIBAFS} ${LIBAFS_MP} ${LIBAFS_EP} ${LIBAFS_BM}: ${LINUX_LIBAFS_NAME}.ko
 .FORCE:
 ${LINUX_LIBAFS_NAME}.ko afspag.ko: .FORCE
 	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" @TOP_SRCDIR@/libafs/make_kbuild_makefile.pl ${KDIR} $@ @TOP_OBJDIR@/src/config/Makefile.config Makefile.afs Makefile.common
-	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" $(MAKE) -C ${LINUX_KERNEL_BUILD} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules
+	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" $(MAKE) -C ${LINUX_KERNEL_BUILD} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules 2>&1 | tee .makelog
+	@if [ `grep ^WARNING .makelog | wc -l` -ne 0 ]; then \
+		echo Error: Undefined symbols in modules ; \
+		rm .makelog \
+		exit 1 ; \
+	fi
+	rm .makelog
 
 <all -linux26 -linux_26 -umlinux26>
 ${LIBAFS}: $(AFSAOBJS) $(AFSNONFSOBJS)
-- 
1.7.11.7


openafs-1.6.2-Linux-setpag-may-replace-credentials.patch:
 afs_pioctl.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- NEW FILE openafs-1.6.2-Linux-setpag-may-replace-credentials.patch ---
>From 6f73cffb9f28061ec1db6c7715124b5a5aa1b898 Mon Sep 17 00:00:00 2001
From: Marc Dionne <marc.c.dionne at gmail.com>
Date: Fri, 18 Jan 2013 22:40:03 -0500
Subject: [PATCH 3/4] Linux: setpag() may replace credentials

For recent Linux. setpag() may replace the current process' cred
structure with a new one.  This is not a problem for most callers,
but in the case of processing a SetTokens2 pioctl with the setpag
option, the new credentials should be used to determine the target
for the token.

Reviewed-on: http://gerrit.openafs.org/8924
Reviewed-by: Chas Williams - CONTRACTOR <chas at cmf.nrl.navy.mil>
Tested-by: BuildBot <buildbot at rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow at your-file-system.com>
(cherry picked from commit b61eac783e8c092cd4ba9f53a2b5ca7d43e08b1b)

Change-Id: I66b5f171318964ff40fe78be24e75519183c3a82
---
 src/afs/afs_pioctl.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c
index 3c01be5..98919a3 100644
--- a/src/afs/afs_pioctl.c
+++ b/src/afs/afs_pioctl.c
@@ -1859,6 +1859,9 @@ DECL_PIOCTL(PSetTokens)
     afs_PutCell(tcell, READ_LOCK);
     if (set_parent_pag) {
 	afs_uint32 pag;
+#if defined(AFS_LINUX26_ENV)
+	afs_ucred_t *old_cred = *acred;
+#endif
 #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
 	char procname[256];
 	osi_procname(procname, 256);
@@ -1868,6 +1871,11 @@ DECL_PIOCTL(PSetTokens)
 #else
 	if (!setpag(acred, -1, &pag, 1)) {
 #endif
+#if defined(AFS_LINUX26_ENV)
+	    /* setpag() may have changed our credentials */
+	    *acred = crref();
+	    crfree(old_cred);
+#endif
 	    afs_InitReq(&treq, *acred);
 	    areq = &treq;
 	}
-- 
1.7.11.7



Index: openafs-kmod.spec
===================================================================
RCS file: /cvs/free/rpms/openafs-kmod/F-18/openafs-kmod.spec,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- openafs-kmod.spec	28 Feb 2013 23:23:41 -0000	1.45
+++ openafs-kmod.spec	4 Mar 2013 01:17:17 -0000	1.46
@@ -21,7 +21,7 @@
 Name:           %{kmod_name}-kmod
 
 Version:        1.6.2
-Release:        2%{?dist}.2
+Release:        3%{?dist}
 Summary:        Kernel module(s)
 
 Group:          System Environment/Kernel
@@ -32,6 +32,21 @@
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 
+# Upstream patches to support kernel 3.8.
+# http://gerrit.openafs.org/8941
+Patch0:         openafs-1.6.2-Linux-3.8-session_keyring-changes.patch
+# http://gerrit.openafs.org/8942
+Patch1:         openafs-1.6.2-Linux-3.8-vmtruncate-removal.patch
+
+# Fix "aklog -setpag" on Linux 3.8
+# http://gerrit.openafs.org/8948
+Patch2:         openafs-1.6.2-Linux-setpag-may-replace-credentials.patch
+
+# Make broken builds a little easier to debug
+# http://gerrit.openafs.org/9334
+Patch3:         openafs-1.6.2-Linux-Detect-undefined-symbols-in-kernel-modules.patch
+
+
 %global AkmodsBuildRequires %{_bindir}/kmodtool, pam-devel, ncurses-devel, flex, byacc, bison, automake
 BuildRequires: %{AkmodsBuildRequires}
 
@@ -58,6 +73,13 @@
 
 # apply patches and do other stuff here
 pushd %{kmod_name}-%{version}
+# Kernel 3.8 patches
+%patch0 -p1
+%patch1 -p1
+# Fix "aklog -setpag" on Linux 3.8
+%patch2 -p1
+# Detect undefined symbols in kmods
+%patch3 -p1
 ./regen.sh
 popd
 
@@ -96,13 +118,16 @@
 
 
 %changelog
+* Sat Mar 02 2013 Ken Dreyer <ktdreyer at ktdreyer.com> - 1.6.2-3
+- Add patches to support kernel 3.8
+
 * Thu Feb 28 2013 Nicolas Chauvet <kwizart at gmail.com> - 1.6.2-2.2
 - Rebuilt for kernel
 
 * Tue Feb 26 2013 Nicolas Chauvet <kwizart at gmail.com> - 1.6.2-2.1
 - Rebuilt for kernel
 
-* Thu Feb 21 2013 Ken Dreyer <ktdreyer at ktdreyer.com> 1.6.2-2
+* Thu Feb 21 2013 Ken Dreyer <ktdreyer at ktdreyer.com> - 1.6.2-2
 - Use newer tarball for 1.6.2 final
 
 * Thu Feb 14 2013 Ken Dreyer <ktdreyer at ktdreyer.com> - 1.6.2-1


More information about the rpmfusion-commits mailing list