[OpenAFS] OpenAFS compiled for OpenSSI
Ron Croonenberg
ronc@depauw.edu
Mon, 18 Jul 2005 13:22:32 -0500
Hi Dan,
I think that install the "other" rpms and then copy the modules to the
right place idea.
What modules and binaries need to be moved ?
(and also, do I need to change any config files or anything else ?)
>It's not clear what you needed to change to get this to work with
>openssi.was it just in the kernel module?
Somone from HP working on OpenSSI helped me making changes.
I'll attach the changes to the bottom. While trying to get it to work we
(well mainly she) came up with 2 patches to make OpenAFS at least
compile.
>If so, the quick & dirty fix is to just install the existing
>openafs-kernel rpm and then install your module manually - it should
>correspond to a different kernel version than the openafs-kernel one
>so there will be no conflict.
As I mentioned, for now I like that idea.
>If you want to dive deep into the world of rpm, go to rpm.net and
>look at maximum rpm. also look at the 'hints and tricks' or 'tips
>and tricks' section of that website.
I would like to, but lately I am doing a lot of deep diving on all kinds
of OpenAFS and OpenSSI topics. (At times I wished my mind had unlimited
recursive/parallel capabilities)
>the way i suggest doing things is pretty kludgy - the right way is to
>roll your own binary rpm. I don't know all that's necessary to do
>that.
right, I would like to do that...but I would like to see "the thing"
going and then pretty it up.
below are the 2 patches. when those are applied it will have one
compile error saying something about an unknow "task_struct"
that is because the "struct" keyword is missing in front of that line
thanks for you help,
(i would appreciate it if you could tell me what to replace after the
quick and dirty method)
Ron
here are the patches:
patch #1: "OpenSSI.patch"
********* start of patch #1 **********
rc/afs/LINUX/osi_groups.c.orig 2005-07-13 14:44:48.177746304 -0700
+++ src/afs/LINUX/osi_groups.c 2005-07-13 14:46:17.692138048 -0700
@@ -24,6 +24,9 @@ RCSID("$Header: /cvs/openafs/src/afs/LIN
#ifdef AFS_LINUX22_ENV
#include "../h/smp_lock.h"
#endif
+#ifdef VPROC
+#include <linux/vproc.h>
+#endif
static int afs_getgroups(cred_t *cr, gid_t *groups);
@@ -33,20 +36,33 @@ static int afs_setgroups(cred_t **cr, in
*/
int set_pag_in_parent(int pag, int g0, int g1)
{
+#ifdef VPROC
+ task_struct *parent = GET_PPID_TASK(current);
+ gid_t *gp = (parent ? parent->groups : NULL);
+#else
#ifdef STRUCT_TASK_STRUCT_HAS_PARENT
gid_t *gp = current->parent->groups;
#else
gid_t *gp = current->p_pptr->groups;
#endif
+#endif
int ngroups;
int i;
+#ifdef VPROC
+ if (!parent) {
+ printk(" Cant set pag in parent - parent is remote \n");
+ return EINVAL;
+ }
+ ngroups = parent->ngroups;
+#else
#ifdef STRUCT_TASK_STRUCT_HAS_PARENT
ngroups = current->parent->ngroups;
#else
ngroups = current->p_pptr->ngroups;
#endif
+#endif
if ((ngroups < 2) || (afs_get_pag_from_groups(gp[0], gp[1]) ==
NOPAG)) {
/* We will have to shift grouplist to make room for pag */
@@ -63,11 +79,15 @@ int set_pag_in_parent(int pag, int g0, i
if (ngroups < NGROUPS)
gp[ngroups] = NOGROUP;
+#ifdef VPROC
+ parent->ngroups = ngroups;
+#else
#ifdef STRUCT_TASK_STRUCT_HAS_PARENT
current->parent->ngroups = ngroups;
#else
current->p_pptr->ngroups = ngroups;
#endif
+#endif
return 0;
}
--- src/afs/LINUX/osi_machdep.h.orig 2005-07-13 16:18:16.736115832
-0700
+++ src/afs/LINUX/osi_machdep.h 2005-07-13 16:18:55.721189200 -0700
@@ -24,11 +24,15 @@
#undef getuerror
#define getpid() current->pid
+#ifdef VPROC
+#define getppid() GET_PPID(current)
+#else
#ifdef STRUCT_TASK_STRUCT_HAS_REAL_PARENT
#define getppid() current->real_parent->pid
#else
#define getppid() current->p_opptr->pid
#endif
+#endif
#ifdef RECALC_SIGPENDING_TAKES_VOID
#define RECALC_SIGPENDING(X) recalc_sigpending()
************* end of path #1 *****************
patch #2; osi_groups.patch :
*********** start of patch #2 ***************
--- src/afs/LINUX/osi_groups.c.lr 2005-07-13 17:00:31.124830184
-0700
+++ src/afs/LINUX/osi_groups.c 2005-07-13 17:00:35.310193912 -0700
@@ -24,9 +24,10 @@ RCSID("$Header: /cvs/openafs/src/afs/LIN
#ifdef AFS_LINUX22_ENV
#include "../h/smp_lock.h"
#endif
+
#ifdef VPROC
-#include <linux/vproc.h>
-#endif
+extern struct task_struct *ssi_get_ppid_task(struct task_struct *t);
+#endif
static int afs_getgroups(cred_t *cr, gid_t *groups);
static int afs_setgroups(cred_t **cr, int ngroups, gid_t *gidset, int
change_parent);
@@ -37,7 +38,7 @@ static int afs_setgroups(cred_t **cr, in
int set_pag_in_parent(int pag, int g0, int g1)
{
#ifdef VPROC
- task_struct *parent = GET_PPID_TASK(current);
+ task_struct *parent = ssi_get_ppid_task(current);
gid_t *gp = (parent ? parent->groups : NULL);
#else
#ifdef STRUCT_TASK_STRUCT_HAS_PARENT
*********** end of patch #2 ***************