logo       


[SSI] openssi/kernel/cluster/ssi/vproc Makefile,1.3,1.4 as_xscribe.c,1.6,1.: msg#00275

Subject: [SSI] openssi/kernel/cluster/ssi/vproc Makefile,1.3,1.4 as_xscribe.c,1.6,1.7 dvp_ics.c,1.7,1.8 dvp_misc.c,1.8,1.9 dvp_move.c,1.3,1.4 dvp_pvpops.c,1.15,1.16 dvp_pvpsops.c,1.9,1.10 dvp_vpops.c,1.18,1.19 nsc_initproc.c,1.6,1.7 pproc_subr.c,1.7,1.8 procfs_mount.c,1.5,1.6 procfs_subr.c,1.7,1.8 reopen.c,1.8,1.9 rproc_cli_pproc.c,1.7,1.8 rproc_cli_subr.c,1.4,1.5 rproc_cli_vproc.c,1.6,1.7 rproc_server.c,1.5,1.6 rproc_server_pproc.c,1.4,1.5 rproc_svr_pproc.c,1.7,1.8 rproc_svr_vproc.c,1.7,1.8 rvp_init.c,1.4,1.5 rvp_pvpops_server.c,1.8,1.9 rvp_pvpsops_server.c,1.6,1.7 vp_debug.c,1.3,1.4
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4323/cluster/ssi/vproc

Modified Files:
        Makefile as_xscribe.c dvp_ics.c dvp_misc.c dvp_move.c 
        dvp_pvpops.c dvp_pvpsops.c dvp_vpops.c nsc_initproc.c 
        pproc_subr.c procfs_mount.c procfs_subr.c reopen.c 
        rproc_cli_pproc.c rproc_cli_subr.c rproc_cli_vproc.c 
        rproc_server.c rproc_server_pproc.c rproc_svr_pproc.c 
        rproc_svr_vproc.c rvp_init.c rvp_pvpops_server.c 
        rvp_pvpsops_server.c vp_debug.c 
Log Message:
Make cluster/ssi/vproc, kernel, mm, arch/i386/kernel, arch/i386/mm build.


Index: dvp_ics.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_ics.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- dvp_ics.c   21 Oct 2004 23:40:49 -0000      1.7
+++ dvp_ics.c   25 Oct 2004 21:51:36 -0000      1.8
@@ -72,11 +72,25 @@
  * param IN:OOL:VAR char_vec_t *
  */
 #define cli_encode_var_ool_char_vec_t_p(hndl,x,len) \
-       cli_encode_gen_var_ool_char_p(hndl,(char *)x,len)
+       cli_encode_gen_var_ool_char_p(hndl,(char *)(x),len)
+
+static inline int
+svr_decode_var_ool_char_vec_t_p_glue(svr_handle_t *hndl, char_vec_t **x,
+                                    int len)
+{
+       char *tmpx = NULL;
+       int svr_stat;
+
+       svr_stat = svr_decode_gen_var_ool_char_p(hndl, tmpx, len);
+       *x = (char_vec_t *)tmpx;
+
+       return svr_stat;
+}
+
 #define svr_decode_var_ool_char_vec_t_p(hndl,x,len) \
-       svr_decode_gen_var_ool_char_p(hndl,(char *)(x),len)
+       svr_decode_var_ool_char_vec_t_p_glue(hndl,&(x),len)
 #define svr_free_var_ool_char_vec_t_p(hndl,x,len) \
-       svr_free_gen_var_ool_char_p(hndl,(char *)x,len)
+       svr_free_gen_var_ool_char_p(hndl,(char *)(x),len)
 
 /* as_xscribe support */
 
@@ -146,17 +160,10 @@
 as_pg_info_free_data_callback_deactivate(u_char *pgaddr, long page)
 {
        struct page *pg = (struct page *)page;
-       int dummy;
 
        kunmap(pg);
        unlock_page(pg);
-       /* Agressively deactivate pages. */
-       if (PageDirect(pg)) {
-               pte_chain_lock(pg);
-               (void)page_referenced(pg, &dummy);
-               pte_chain_unlock(pg);
-               deactivate_page(pg);
-       }
+       /* XXX aggressively deactivate pages */
        page_cache_release(pg);
 }
 
@@ -231,13 +238,17 @@
 /*
  * Include the client stubs generated by icsgen.
  */
-#include "icscli_vproc_gen.c"
+#include <cluster/gen/icscli_vproc_gen.c>
 
 /*
  * Include the corresponding server stubs generated by icsgen.
  */
-#include "icssvr_vproc_gen.c"
+#include <cluster/gen/icssvr_vproc_gen.c>
 
+/*
+ * Include xdr routines
+ */
+#include <cluster/gen/as_xscribe_xdr.c>
 
 static int get_size(char ** argv, int cnt, int limit)
 {
@@ -277,8 +288,6 @@
        int error;
        int len;
 
-       extern int count(vaddr_t, int);
-
        /*
         * If the vector pointer is NULL then package up a NULL terminated
         * vector array.
@@ -299,7 +308,7 @@
        *vec_val = NULL;
        *vec_sz = 0;
 
-       str_cnt = count((vaddr_t)strp, limit);
+       str_cnt = count(strp, limit);
 
        if ((str_sz = get_size(strp, str_cnt, limit)) > limit)
                return -E2BIG;
@@ -364,4 +373,4 @@
 /*
  * Include the server tables (and server registration routine).
  */
-#include "icssvr_vproc_tables_gen.c"
+#include <cluster/gen/icssvr_vproc_tables_gen.c>

Index: rproc_cli_subr.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_cli_subr.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- rproc_cli_subr.c    20 Oct 2004 03:23:32 -0000      1.4
+++ rproc_cli_subr.c    25 Oct 2004 21:51:37 -0000      1.5
@@ -26,7 +26,7 @@
 #include <linux/errno.h>
 #include <linux/vproc.h>
 #include <linux/dpvproc.h>
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 
 
 /*

Index: dvp_misc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_misc.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- dvp_misc.c  21 Oct 2004 23:40:49 -0000      1.8
+++ dvp_misc.c  25 Oct 2004 21:51:36 -0000      1.9
@@ -27,6 +27,7 @@
 #include <linux/vproc.h>
 #include <linux/resource.h>
 #include <linux/dpvproc.h>
+#include <linux/mount.h>
 #include <asm/siginfo.h>
 
 
@@ -35,10 +36,10 @@
 #include <cluster/ics.h>
 #include <cluster/ssi/rcopy.h>
 
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 
-#include "ics_vproc_macros_gen.h"
-#include "ics_vproc_protos_gen.h"
+#include <cluster/gen/ics_vproc_macros_gen.h>
+#include <cluster/gen/ics_vproc_protos_gen.h>
 
 /*
  * NAME:       ssi_priority_task
@@ -148,7 +149,7 @@
        read_unlock(&tasklist_lock);
 
        if (which == PRIO_PROCESS) {
-               niceval = ssi_priority_task(who, VPROC_GET, nice);
+               niceval = ssi_priority_task(who, VPROC_GET, -ESRCH);
                goto out;
        }
 

Index: Makefile
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/Makefile,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- Makefile    20 Oct 2004 03:23:31 -0000      1.3
+++ Makefile    25 Oct 2004 21:51:36 -0000      1.4
@@ -39,11 +39,8 @@
        rproc_server_pproc.o \
        rproc_svr_vproc.o \
        rproc_svr_pproc.o \
-       rproc_xdr.o \
        reopen.o \
-       reopen_xdr.o \
        as_xscribe.o \
-       as_xscribe_xdr.o \
        nsc_initproc.o \
        surrogate.o \
        procfs_subr.o \

Index: pproc_subr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/pproc_subr.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- pproc_subr.c        21 Oct 2004 23:40:50 -0000      1.7
+++ pproc_subr.c        25 Oct 2004 21:51:36 -0000      1.8
@@ -24,6 +24,7 @@
 #include <linux/sched.h>
 #include <linux/vproc.h>
 #include <linux/tty.h>
+#include <linux/smp_lock.h>
 
 /*
  * int
@@ -37,9 +38,10 @@
  * Remarks:
  *     The has_sctty is currently not supported.
  */
-int pproc_setattr(struct task_struct *p, struct vproc *vp, pid_t *pidp, pid_t 
*ppidp,
-             pid_t *pgrpp, pid_t *sidp, int *has_sctty)
+int pproc_setattr(struct task_struct *p, struct vproc *vp, pid_t *pidp,
+                 pid_t *ppidp, pid_t *pgrpp, pid_t *sidp, int *has_sctty)
 {
+       write_lock_irq(&tasklist_lock);
        if (vp)
                p->p_vproc = vp;
        if (pidp) {
@@ -48,10 +50,13 @@
        }
        if (ppidp)
                p->ppid = *ppidp;
-       if (pgrpp)
-               p->pgrp = *pgrpp;
-       if (sidp)
-               p->session = *sidp;
+       if (p->signal) {
+               if (pgrpp)
+                       p->signal->pgrp = *pgrpp;
+               if (sidp)
+                       p->signal->session = *sidp;
+       }
+       write_unlock_irq(&tasklist_lock);
 
        return 0;
 }
@@ -75,16 +80,20 @@
 {
        SSI_ASSERT(p != NULL);
 
+       read_lock(&tasklist_lock);
        if (pidp)
                *pidp = p->pid;
        if (ppidp)
                *ppidp = p->ppid;
-       if (pgrpp)
-               *pgrpp = p->pgrp;
-       if (sidp)
-               *sidp = p->session;
+       if (p->signal) {
+               if (pgrpp)
+                       *pgrpp = p->signal->pgrp;
+               if (sidp)
+                       *sidp = p->signal->session;
+       }
        if (has_execed)
                *has_execed = (int) p->did_exec;
+       read_unlock(&tasklist_lock);
 
        return 0;
 }
@@ -98,23 +107,31 @@
  * Calling/Exit State:
  *     None.
  */
-int pproc_setctty(struct task_struct *p, dev_t cttydev, clusternode_t 
cttynode, int flag)
+int pproc_setctty(struct task_struct *p, dev_t cttydev, clusternode_t cttynode,
+                 int flag)
 {
-       if (flag & VCTTY_SETCTTY) {
-               SSI_ASSERT(cttydev != NODEV);
-               p->cttydev = cttydev;
-               p->cttynode = cttynode;
-               p->tty_old_pgrp = 0;
-       }
-       if (flag & VCTTY_CLEARCTTY) {
-               p->cttydev = NODEV;
-               p->cttynode = CLUSTERNODE_INVAL;
-               /* NSC_XXX_LR: temp hack until tty stuff is figure out */
-               if (flag & VCTTY_SETLDR) {
-                       p->leader = 1;
-                       p->tty_old_pgrp = 0;
+       read_lock(&tasklist_lock);
+       if (p->signal) {
+               task_lock(p);
+               if (flag & VCTTY_SETCTTY) {
+                       SSI_ASSERT(cttydev != NODEV);
+                       p->signal->cttydev = cttydev;
+                       p->signal->cttynode = cttynode;
+                       p->signal->tty_old_pgrp = 0;
                }
+               if (flag & VCTTY_CLEARCTTY) {
+                       p->signal->cttydev = NODEV;
+                       p->signal->cttynode = CLUSTERNODE_INVAL;
+                       /* SSI_XXX_LR: temp hack until tty stuff figure out */
+                       if (flag & VCTTY_SETLDR) {
+                               p->signal->leader = 1;
+                               p->signal->tty_old_pgrp = 0;
+                       }
+               }
+               task_unlock(p);
        }
+       read_unlock(&tasklist_lock);
+
        return 0;
 }
 
@@ -129,10 +146,17 @@
  */
 int pproc_getctty(struct task_struct *p, dev_t *cttydev, clusternode_t 
*cttynode)
 {
-       if (cttydev)
-               *cttydev = p->cttydev;
-       if (cttynode)
-               *cttynode = p->cttynode;
+       read_lock(&tasklist_lock);
+       if (p->signal) {
+               task_lock(p);
+               if (cttydev)
+                       *cttydev = p->signal->cttydev;
+               if (cttynode)
+                       *cttynode = p->signal->cttynode;
+               task_unlock(p);
+       }
+       read_unlock(&tasklist_lock);
+
        return 0;
 }
 
@@ -159,7 +183,7 @@
 {
        (void)flags;
 
-       return p->sigpending;
+       return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING));
 }
 
 /*
@@ -224,9 +248,16 @@
        int pgrp = 0;
        int sid = 0;
        struct vproc *vp;
+       int old_pgrp = 0;
+
+       if (*pgidp)
+               old_pgrp = *pgidp;
 
        *pgidp = 0;
        tty = ssi_get_tty(cttydev);
+
+       lock_kernel();
+
        if (tty == NULL) {
 #ifdef DEBUG
                printk(KERN_WARNING "pps_release_ctty: ctty gone;"
@@ -234,26 +265,30 @@
                                 cttydev, sid);
 #endif
                error = -ENXIO;
+               if (old_pgrp) {
+                       kill_pg(old_pgrp, SIGHUP, exit);
+                       kill_pg(old_pgrp, SIGCONT, exit);
+               }
                goto out;
        }
-
-       lock_kernel();
-
-       if (tty->pgrp > 0) {
-               fpgrpvp = VPROCPTR(tty->pgrp);
-               if (fpgrpvp)
-                       pgrp = fpgrpvp->vp_pid;
-
-               if (exit && tty->driver.type != TTY_DRIVER_TYPE_PTY)
+       else {
+               pgrp = *pgidp = tty->pgrp;
+               if (exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
                        tty_vhangup(tty);
+       }
+
+       if (pgrp > 0) {
+               fpgrpvp = VPROCPTR(pgrp);
 
                kill_pg(pgrp, SIGHUP, exit);
                if (!exit) {
                        kill_pg(pgrp, SIGCONT, exit);
                        if (fpgrpvp) {
-                               if (!VPOP_SETCTTY(fpgrpvp, tty->device,
-                                               this_node, 0,VCTTY_CLEARFGPGRP))
-                                       VPROC_RELE(fpgrpvp, "pgrp 
disassociate_ctty");
+                               if (!VPOP_SETCTTY(fpgrpvp, tty_devnum(tty),
+                                                 this_node, 0,
+                                                 VCTTY_CLEARFGPGRP))
+                                       VPROC_RELE(fpgrpvp,
+                                                  "pgrp disassociate_ctty");
                        }
                }
        }
@@ -262,7 +297,7 @@
        if (sid) {
                vp = VPROCPTR(sid);
                if (vp) {
-                       VPOP_SETCTTY(vp, tty->device, this_node, 0,
+                       VPOP_SETCTTY(vp, tty_devnum(tty), this_node, 0,
                        VCTTY_CLEARCTTY|VCTTY_INACTIVECTTY);
                        VPROC_RELE(vp, "temp disassociate_ctty");
                }

Index: dvp_move.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_move.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- dvp_move.c  21 Oct 2004 23:40:49 -0000      1.3
+++ dvp_move.c  25 Oct 2004 21:51:36 -0000      1.4
@@ -26,12 +26,12 @@
 #include <asm/uaccess.h>
 #include <cluster/assert.h>
 
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 #include "rproc_server.h"
 
 #include <cluster/rpc/rpc.h>
-#include "ics_vproc_macros_gen.h"
-#include "ics_vproc_protos_gen.h"
+#include <cluster/gen/ics_vproc_macros_gen.h>
+#include <cluster/gen/ics_vproc_protos_gen.h>
 
 struct list_head movement_list = LIST_HEAD_INIT(movement_list);
 spinlock_t movement_list_lock = SPIN_LOCK_UNLOCKED;
@@ -684,7 +684,9 @@
                        continue;
                if (p->mm != t->mm && p->fs != t->fs &&
                    p->files != t->files && p->signal != t->signal &&
-                   p->sighand != t->sighand)
+                   p->sighand != t->sighand &&
+                   p->sysvsem.undo_list != t->sysvsem.undo_list &&
+                   p->group_info != t->group_info)
                        continue;
                count++;
        }
@@ -708,13 +710,17 @@
                                continue;
                        if (p->mm != t->mm && p->fs != t->fs &&
                            p->files != t->files && p->signal != t->signal &&
-                           p->sighand != t->sighand)
+                           p->sighand != t->sighand &&
+                           p->sysvsem.undo_list != t->sysvsem.undo_list &&
+                           p->group_info != t->group_info)
                                continue;
                        tpid = t->pid;
                        ttgid = t->tgid;
                        if (p->mm != t->mm || p->fs != t->fs ||
                            p->files != t->files || p->signal != t->signal ||
-                           p->sighand != t->sighand) {
+                           p->sighand != t->sighand ||
+                           p->sysvsem.undo_list != t->sysvsem.undo_list ||
+                           p->group_info != t->group_info) {
                                read_unlock(&tasklist_lock);
                                kfree(pidp);
                                printk(KERN_WARNING
@@ -771,7 +777,8 @@
                    atomic_read(&p->fs->count) != count ||
                    atomic_read(&p->files->count) != count ||
                    atomic_read(&p->signal->count) != count ||
-                   atomic_read(&p->sighand->count) != count) {
+                   atomic_read(&p->sighand->count) != count ||
+                   atomic_read(&p->sysvsem.undo_list->refcnt) != count) {
                        printk(KERN_WARNING
                               "%s: cannot find all shares for pid %d\n",
                               __FUNCTION__, p->pid);
@@ -862,7 +869,7 @@
        sigfillset(&fillset);
        spin_lock_irqsave(&p->sighand->siglock, flags);
        if ((h->mh_type & MOV_SIGMIG) || p != current) {
-               p->migpending = 1;
+               set_tsk_thread_flag(p, TIF_MIGPENDING);
                /* Does the task have all signals blocked? */
                if (has_pending_signals(&fillset, &p->blocked))
                        /* No: wake it up. */
@@ -1258,7 +1265,9 @@
        }
        if (node < 0) {
                type |= MOV_PGRP;
-               id = p->pgrp;
+               read_lock(&tasklist_lock);
+               id = p->signal->pgrp;
+               read_unlock(&tasklist_lock);
                node = -node;
        } else {
                type |= MOV_PID;

Index: nsc_initproc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/nsc_initproc.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- nsc_initproc.c      21 Oct 2004 23:40:50 -0000      1.6
+++ nsc_initproc.c      25 Oct 2004 21:51:36 -0000      1.7
@@ -22,15 +22,14 @@
  *
  */
 
-#define __KERNEL_SYSCALLS__
-
 #include <linux/types.h>
 #include <linux/vproc.h>
 #include <linux/dpvproc.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
-#include <linux/unistd.h>
+#include <linux/syscalls.h>
+#include <linux/tty.h>
 
 #include <cluster/nsc.h>
 #include <cluster/synch.h>
@@ -86,10 +85,10 @@
        struct k_sigaction sa;
 
        /* Use dameonize() to insure tsk->files == init_task.files */
-       daemonize();
+       daemonize("child_reaper");
        set_fs(KERNEL_DS);
        for (fd = 0; fd < tsk->files->max_fds; fd++)
-               (void)close(fd);
+               (void)sys_close(fd);
        if (init_node == this_node) {
 
                /* On the init node, we call this first to transition to

Index: rproc_server.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_server.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- rproc_server.c      20 Oct 2004 03:23:32 -0000      1.5
+++ rproc_server.c      25 Oct 2004 21:51:37 -0000      1.6
@@ -25,9 +25,10 @@
 #include <linux/types.h>
 #include <linux/errno.h>
 #include <linux/dpvproc.h>
-#include "rproc_server.h"
-#include "rproc.h"
 
+#include <cluster/gen/rproc.h>
+
+#include "rproc_server.h"
 
 void svrproc_cleanup_task(struct vproc *);
 

Index: dvp_pvpops.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_pvpops.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- dvp_pvpops.c        21 Oct 2004 23:40:49 -0000      1.15
+++ dvp_pvpops.c        25 Oct 2004 21:51:36 -0000      1.16
@@ -26,7 +26,9 @@
 #include <linux/vproc.h>
 #include <linux/dpvproc.h>
 #include <linux/fs.h>
+#include <linux/namei.h>
 #include <linux/signal.h>
+#include <linux/proc_fs.h>
 #include <asm/siginfo.h>
 #include <linux/wait.h>
 #include <linux/errno.h>
@@ -38,10 +40,10 @@
 #include <cluster/ics.h>
 #include <cluster/ssi/rcopy.h>
 
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 
-#include "ics_vproc_macros_gen.h"
-#include "ics_vproc_protos_gen.h"
+#include <cluster/gen/ics_vproc_macros_gen.h>
+#include <cluster/gen/ics_vproc_protos_gen.h>
 
 /* Forward references */
 void pvproc_orphan_pgrp_check(struct vproc *, pid_t, pid_t, int);
@@ -2726,7 +2728,7 @@
                                                (flags & VCTTY_CLEARCTTY)) {
                PVPOP_SIGPROC(v, SIGHUP, SIGCONT, 0, VSIG_INTERNAL, NULL);
                if (PVP(v)->pvp_pproc != NULL)
-                       PVP(v)->pvp_pproc->tty_old_pgrp = pgid;
+                       PVP(v)->pvp_pproc->signal->tty_old_pgrp = pgid;
 
        }
 
@@ -3433,8 +3435,9 @@
        RPVPOP_START_OP(&rargs, v, PV_PGRPLEADER|PV_SESSIONLEADER,
                        "pvpop_procfs_getattr");
        ret = RPVPOP_PROCFS_GETATTR(rargs.node, &rargs.error,
-                               &rargs.fromnodehint, &rargs.tonodehint,
-                               v->vp_pid, dumpable, euid, egid);
+                                   &rargs.fromnodehint, &rargs.tonodehint,
+                                   v->vp_pid, do_check, fd, dumpable, euid,
+                                   egid, tgid);
        RPVPOP_END_OP(&rargs, ret, error);
 
        if (!RPVPOP_IS_LOCAL(&rargs)) {
@@ -3561,6 +3564,8 @@
        char *path = NULL;
        int pathlen = PATH_MAX + 1;
        ics_userbuf_t ubuf;
+       int link_count;
+       int total_link_count;
 
        /*
         * Make sure this operation is not being performed during process
@@ -3595,14 +3600,14 @@
                if (!error && path && (pathlen != 0)) {
                        struct nameidata nd;
 
-                       if (path_init(path, 0, &nd)) {
-                               current->link_count--;
-                               error = link_path_walk(path, &nd);
-                               current->link_count++;
-                               if (!error) {
-                                       *de = nd.dentry;
-                                       *vfsmnt = nd.mnt;
-                               }
+                       link_count = current->link_count;
+                       total_link_count = current->total_link_count;
+                       error = path_lookup(path, 0, &nd);
+                       current->link_count = link_count;
+                       current->total_link_count = total_link_count;
+                       if (!error) {
+                               *de = nd.dentry;
+                               *vfsmnt = nd.mnt;
                        }
                }
                kfree(path);
@@ -3845,7 +3850,7 @@
        VPROC_UNLOCK_EXCL(v, "pvpop_proc_lookupfd");
        if (!files)
                goto out;
-       read_lock(&files->file_lock);
+       spin_lock(&files->file_lock);
        file = fcheck_files(files, fd);
        if (!file)
                goto out_unlock;
@@ -3853,7 +3858,7 @@
        error = 0;
 
 out_unlock:
-       read_unlock(&files->file_lock);
+       spin_unlock(&files->file_lock);
 
        /* SSI_XXX: not sure if this is using rmtfb properly */
        if (file && (clntnode != this_node)) {
@@ -3969,7 +3974,7 @@
        ssi_procstate_get(&pstate);
        ret = RPVPOP_PROCFS_TID_LIST(rargs.node, &rargs.error,
                        &rargs.fromnodehint, &rargs.tonodehint,
-                       v->vp_pid, &pstate, index, tids, len);
+                       v->vp_pid, index, tids, len);
        RPVPOP_END_OP(&rargs, ret, error);
 
        if (!RPVPOP_IS_LOCAL(&rargs)) {
@@ -3977,9 +3982,9 @@
                return(error);
        }
 
-       if (*tids == NULL) {
-               *tids = kmalloc((sizeof(unsigned int) * *pids_size), 
GFP_KERNEL);
-               if (*tids == NULL) {
+       if (!*tids) {
+               *tids = kmalloc((sizeof(**tids) * *len), GFP_KERNEL);
+               if (!*tids) {
                        len = 0;
                        return -ENOMEM;
                }
@@ -3997,10 +4002,13 @@
        VPROC_UNLOCK_EXCL(v, "pvpop_procfs_tid_list");
 
        error = ssi_get_tid_list(task, index, *tids);
+       if (error >= 0)
+               *len = error;
 
        VPROC_RELEASE_MOVEMENT(v, "pvpop_procfs_tid_list");
        return(error);
 }
+
 int
 pvpop_ptrace(struct vproc *vp,
             int request,

Index: rproc_cli_pproc.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_cli_pproc.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- rproc_cli_pproc.c   21 Oct 2004 23:40:50 -0000      1.7
+++ rproc_cli_pproc.c   25 Oct 2004 21:51:37 -0000      1.8
@@ -31,14 +31,17 @@
 #include <linux/binfmts.h>
 #include <linux/module.h>
 #include <linux/timer.h>
+#include <linux/mount.h>
+
 #include <asm/user.h>
 #include <asm/uaccess.h>
 
 #include <cluster/assert.h>
 #include <cluster/nodelist.h>
+#include <cluster/ssi/cfs/cfs_clnt.h>
 
-#include "rproc.h"
-#include "reopen.h"
+#include <cluster/gen/rproc.h>
+#include <cluster/gen/reopen.h>
 
 #include "arch/rproc_arch.c"
 
@@ -46,25 +49,47 @@
 struct vfsmount;
 
 static int
+group_info_load_msg(rvp_group_info_t *rgp)
+{
+       struct task_struct *t = current;
+       struct group_info *gp = t->group_info;
+
+       /* SSI_XXX: fix to handle more than 32 groups. */
+       if (gp->blocks[0] != gp->small_block)
+               return -EBUSY;
+
+       rgp->rvp_group_info = *gp;
+
+       return 0;
+}
+
+static void
+group_info_remove_msg(rvp_group_info_t *rgp)
+{
+       /* SSI_XXX: will be needed when we handle more than 32 groups. */
+}
+
+static int
 alloc_rvp_sigpending(struct sigpending *sp, rvp_sigpending_t *rsp)
 {
-       struct sigqueue *sqp;
+       struct task_struct *t = current;
        rvp_sigqueue_t *rsqp;
        unsigned long flags;
+       struct list_head *lp;
 
        rsqp = &rsp->rvp_sp_queue;
-       SSI_ASSERT(rsqp->rvp_sigqueue_t_val == NULL);
-       SSI_ASSERT(rsqp->rvp_sigqueue_t_len == 0);
-       spin_lock_irqsave(&current->sighand->siglock, flags);
-       for (sqp = sp->head; sqp; sqp = sqp->next)
+       SSI_ASSERT(!rsqp->rvp_sigqueue_t_val);
+       SSI_ASSERT(!rsqp->rvp_sigqueue_t_len);
+       spin_lock_irqsave(&t->sighand->siglock, flags);
+       list_for_each(lp, &sp->list)
                rsqp->rvp_sigqueue_t_len++;
-       spin_unlock_irqrestore(&current->sighand->siglock, flags);
+       spin_unlock_irqrestore(&t->sighand->siglock, flags);
 
        if (rsqp->rvp_sigqueue_t_len) {
                rsqp->rvp_sigqueue_t_val =
-                       kmalloc(sizeof(rvp_sigqueue_entry_t) *
+                       kmalloc(sizeof(*rsqp->rvp_sigqueue_t_val) *
                                rsqp->rvp_sigqueue_t_len, GFP_USER);
-               return (rsqp->rvp_sigqueue_t_val == NULL);
+               return (!rsqp->rvp_sigqueue_t_val);
        }
 
        return 0;
@@ -75,16 +100,15 @@
 {
        rvp_sigqueue_t *rsqp;
        struct sigqueue *sqp;
-       struct sigqueue *curr_sqp;
        int i;
+       struct list_head *lp;
 
        rsqp = &rsp->rvp_sp_queue;
-       sqp = sp->head;
        i = 0;
-       for (curr_sqp = sqp; curr_sqp != NULL;  curr_sqp = curr_sqp->next) {
+       list_for_each(lp, &sp->list) {
+               sqp = list_entry(lp, struct sigqueue, list);
                if (i < rsqp->rvp_sigqueue_t_len)
-                       rsqp->rvp_sigqueue_t_val[i++].rvp_sq_info =
-                               curr_sqp->info;
+                       rsqp->rvp_sigqueue_t_val[i++].rvp_sq_info = sqp->info;
                else
                        return 1;
        }
@@ -103,15 +127,18 @@
 }
 
 static int
-signal_load_msg(struct task_struct *t, rvp_common_data *comm_datap,
-               int optype)
+signal_load_msg(rvp_common_data *comm_datap, int optype)
 {
+       struct task_struct *t = current;
        int error;
        struct sigpending *sp;
        rvp_sigpending_t *rsp;
        unsigned long flags;
 
-       if (!RVP_ISRFORK(optype)) {
+       comm_datap->comm_signal.rvp_ss_tty_old_pgrp = t->signal->tty_old_pgrp;
+       comm_datap->comm_signal.rvp_ss_cttydev = t->signal->cttydev;
+       comm_datap->comm_signal.rvp_ss_cttynode = t->signal->cttynode;
+       if (!RVP_ISRFORK(optype) && optype != RVP_MIGRATE_THREAD) {
                for (;;) {
                        error = 0;
                        sp = &t->pending;
@@ -120,9 +147,13 @@
                        sp = &t->signal->shared_pending;
                        rsp = &comm_datap->comm_signal.rvp_ss_pending;
                        error |= alloc_rvp_sigpending(sp, rsp);
-                       if (error)
+                       if (error) {
+                               sigpending_remove_msg(rsp);
+                               rsp = &comm_datap->comm_pending;
+                               sigpending_remove_msg(rsp);
                                return -ENOMEM;
-                       spin_lock_irqsave(&current->sighand->siglock, flags);
+                       }
+                       spin_lock_irqsave(&t->sighand->siglock, flags);
                        error |= load_rvp_sigpending(sp, rsp);
                        sp = &t->pending;
                        rsp = &comm_datap->comm_pending;
@@ -138,7 +169,7 @@
        array_cpy(comm_datap->comm_sigaction, t->sighand->action);
        comm_datap->comm_blocked = t->blocked;
        comm_datap->comm_real_blocked = t->real_blocked;
-       spin_unlock_irqrestore(&current->sighand->siglock, flags);
+       spin_unlock_irqrestore(&t->sighand->siglock, flags);
 
        return 0;
 }
@@ -146,27 +177,30 @@
 static int
 semundo_load_msg(semundolist *semundop)
 {
+       struct task_struct *t = current;
        struct sem_undo *un;
        int count = 0;
        int *undop;
 
-       if (current->semundo == NULL) {
+       if (!t->sysvsem.undo_list) {
                semundop->semundolist_val = NULL;
                semundop->semundolist_len = 0;
                return 0;
        }
 
-       for(un = current->semundo; un; un=un->proc_next, count++);
+       for (un = t->sysvsem.undo_list->proc_list; un; un = un->proc_next)
+               count++;
 
-       semundop->semundolist_val = kmalloc(count * sizeof(int), GFP_USER);
-       if (semundop->semundolist_val == NULL)
+       semundop->semundolist_val =
+               kmalloc(count * sizeof(semundop->semundolist_val), GFP_USER);
+       if (!semundop->semundolist_val)
                return -ENOMEM;
        semundop->semundolist_len = count;
 
        undop = semundop->semundolist_val;
 
-       for(un = current->semundo; un; un=un->proc_next, undop++)
-               *undop = un->semid;
+       for (un = t->sysvsem.undo_list->proc_list; un; un = un->proc_next)
+               *undop++ = un->semid;
 
        return 0;
 }
@@ -381,7 +415,6 @@
        rvp_common_data *comm_datap;
        struct task_struct *t = current;
        int error;
-       int i;
        unsigned long flags;
        runqueue_t *rq;
 
@@ -410,12 +443,8 @@
        comm_datap->comm_pdeath_signal = t->pdeath_signal;
        comm_datap->comm_personality = t->personality;
        comm_datap->comm_did_exec = t->did_exec;
-       comm_datap->comm_task_dumpable = t->task_dumpable;
-       comm_datap->comm_tty_old_pgrp = t->tty_old_pgrp;
        comm_datap->comm_tgid = t->tgid;
-       comm_datap->comm_leader = t->leader;    /* JAG_XXX: Goes away? */
-       comm_datap->comm_cttydev = t->cttydev;
-       comm_datap->comm_cttynode = t->cttynode;
+       comm_datap->comm_leader = t->signal->leader; /* JAG_XXX: Goes away? */
        comm_datap->comm_clear_child_tid = (arch_ulong)t->clear_child_tid;
        /* process times & timers */
        comm_datap->comm_it_real_value = t->it_real_value;
@@ -431,22 +460,22 @@
                                t->real_timer.expires - jiffies;
                }
        }
-       comm_datap->comm_times = t->times;
-       comm_datap->comm_group_times = t->group_times;
-       comm_datap->comm_start_time = t->start_time - jiffies;
+       comm_datap->comm_utime = t->utime;
+       comm_datap->comm_stime = t->stime;
+       comm_datap->comm_cutime = t->cutime;
+       comm_datap->comm_cstime = t->cstime;
+       comm_datap->comm_nvcsw = t->nvcsw;
+       comm_datap->comm_nivcsw = t->nivcsw;
+       comm_datap->comm_cnvcsw = t->cnvcsw;
+       comm_datap->comm_cnivcsw = t->cnivcsw;
 
        /* stats */
-       array_cpy(comm_datap->comm_per_cpu_utime, t->per_cpu_utime);
-       array_cpy(comm_datap->comm_per_cpu_stime, t->per_cpu_stime);
-
        comm_datap->comm_min_flt = t->min_flt;
        comm_datap->comm_maj_flt = t->maj_flt;
-       comm_datap->comm_nvcsw = t->nvcsw;
-       comm_datap->comm_nivcsw = t->nivcsw;
        comm_datap->comm_cmin_flt = t->cmin_flt;
        comm_datap->comm_cmaj_flt = t->cmaj_flt;
-       comm_datap->comm_cnvcsw = t->cnvcsw;
-       comm_datap->comm_cnivcsw = t->cnivcsw;
+
+       comm_datap->comm_start_time = t->start_time - get_jiffies_64();
 
        /* process credentials */
        comm_datap->comm_uid = t->uid;
@@ -457,10 +486,9 @@
        comm_datap->comm_egid = t->egid;
        comm_datap->comm_sgid = t->sgid;
        comm_datap->comm_fsgid = t->fsgid;
-       comm_datap->comm_ngroups = t->ngroups;
 
-       for (i=0; i < t->ngroups; i++)
-               comm_datap->comm_groups[i] = t->groups[i];
+       if (optype != RVP_MIGRATE_THREAD)
+               group_info_load_msg(&comm_datap->comm_group_info);
 
        comm_datap->comm_cap_effective = t->cap_effective;
        comm_datap->comm_cap_inheritable = t->cap_inheritable;
@@ -472,7 +500,7 @@
        array_cpy(comm_datap->comm_comm, t->comm);
 
        if (!RVP_ISRFORK(optype))
-               semundo_load_msg(&comm_datap->comm_semundop);
+               semundo_load_msg(&comm_datap->comm_sysvsem);
 
 /* SSI_XXX: we have a race with anyone who changes the root/cwd
  * of multiple tasks at once (such as pivot_root)
@@ -494,7 +522,7 @@
                goto out;
 
        /* signal handlers */
-       error = signal_load_msg(t, comm_datap, optype);
+       error = signal_load_msg(comm_datap, optype);
        if (error)
                goto out;
 
@@ -538,6 +566,7 @@
        if (comm_datap == NULL)
                return;
 
+       group_info_remove_msg(&comm_datap->comm_group_info);
        sigpending_remove_msg(&comm_datap->comm_pending);
        sigpending_remove_msg(&comm_datap->comm_signal.rvp_ss_pending);
 
@@ -547,14 +576,14 @@
 
        reopen_remove_msg(&comm_datap->comm_reopendata);
 
-       semundo_remove_msg(&comm_datap->comm_semundop);
+       semundo_remove_msg(&comm_datap->comm_sysvsem);
 
        if (error) {
                if (comm_datap->comm_real_timer_set)
                        add_timer(&current->real_timer);
        }
 
-       kfree((caddr_t)comm_datap);
+       kfree(comm_datap);
 }
 
 static int
@@ -718,7 +747,7 @@
        noncfs_locks = 0;
        files = task->files;
        if (files) {
-               read_lock(&files->file_lock);
+               spin_lock(&files->file_lock);
                for(i=0; i < files->max_fds; i++) {
                        struct file_lock *fl;
                        fp = files->fd[i];
@@ -735,10 +764,9 @@
                                locks++;
                        }
                }
-               read_unlock(&files->file_lock);
+               spin_unlock(&files->file_lock);
        }
-       if (!locks)
-               task->locks = 0;
+
        return noncfs_locks;
 }
 
@@ -766,7 +794,7 @@
        }
 
        /* Kernel process? */
-       if (current->mm == NULL) {
+       if (t->mm == NULL) {
                error = -EBUSY;
                printk("Cannot move kernel process\n");
                goto out;
@@ -828,8 +856,8 @@
                 * If the process is sharing signal structs it cannot go
                 * remote.
                 */
-               if (atomic_read(&current->signal->count) != 1 ||
-                   atomic_read(&current->sighand->count) != 1) {
+               if (atomic_read(&t->signal->count) != 1 ||
+                   atomic_read(&t->sighand->count) != 1) {
                        error = -EBUSY;
                        printk("Cannot move process %d - %s has"
                               " CLONE_SIGHAND\n",
@@ -837,7 +865,7 @@
                        goto out;
                }
 
-               if (!thread_group_leader(current)) {
+               if (!thread_group_leader(t)) {
                        error = -EBUSY;
                        printk("Cannot move process %d - %s is threaded\n",
                               t->pid, t->comm);
@@ -859,7 +887,7 @@
        /*
         * If the process is devfsd or its children it cannot go remote
         */
-       if (current->flags & PF_CFS_DEVFS_HACK) {
+       if (t->flags & PF_CFS_DEVFS_HACK) {
                error = -EBUSY;
                printk("Cannot move process %d - %s is devfsd or child\n",
                       t->pid, t->comm);
@@ -867,49 +895,39 @@
        }
 
        /* XXX: temporary things */
-       if (current->mm->def_flags != 0) {
+       if (t->group_info->blocks[0] != t->group_info->small_block) {
                error = -EBUSY;
-               printk("Cannot move process %d - %s"
-                      " has pages locked in memory\n",
+               printk("Cannot move process %d - %s too many groups\n",
                       t->pid, t->comm);
                goto out;
        }
-
-       if (current->locks != 0) {
-               if (ssi_recalc_locks(current, optype)) {
-                       error = -EBUSY;
-                       printk("Cannot move process %d - %s has locks\n",
-                              t->pid,t->comm);
-                       goto out;
-               }
-       }
-
-       if (current->semsleeping != NULL) {
+       if (t->mm->def_flags != 0) {
                error = -EBUSY;
-               printk("Cannot move process %d - %s sleeping on semaphore\n",
+               printk("Cannot move process %d - %s"
+                      " has pages locked in memory\n",
                       t->pid, t->comm);
                goto out;
        }
 
-       if (current->notifier != NULL) {
+       if (ssi_recalc_locks(t, optype)) {
                error = -EBUSY;
-               printk("Cannot move process %d - %s"
-                      " has notifier routine set\n",
-                      t->pid, t->comm);
+               printk("Cannot move process %d - %s has locks\n",
+                      t->pid,t->comm);
                goto out;
        }
 
-       if (current->tux_info != NULL || current->tux_exit != NULL) {
+       if (t->notifier != NULL) {
                error = -EBUSY;
-               printk("Cannot move process %d - %s has TUX state\n",
+               printk("Cannot move process %d - %s"
+                      " has notifier routine set\n",
                       t->pid, t->comm);
                goto out;
        }
 
-       if (current->policy != SCHED_NORMAL) {
+       if (t->policy != SCHED_NORMAL) {
                error = -EBUSY;
                printk("Cannot move process %d - %s scheduling policy is %lu\n",
-                      t->pid, t->comm, current->policy);
+                      t->pid, t->comm, t->policy);
                goto out;
        }
 

Index: rvp_init.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rvp_init.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- rvp_init.c  20 Oct 2004 03:23:32 -0000      1.4
+++ rvp_init.c  25 Oct 2004 21:51:37 -0000      1.5
@@ -25,7 +25,7 @@
 #include <linux/types.h>
 #include <linux/dpvproc.h>
 #include <cluster/nsc.h>
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 
 
 void rvp_init(void)

Index: rproc_svr_vproc.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_svr_vproc.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- rproc_svr_vproc.c   20 Oct 2004 03:23:32 -0000      1.7
+++ rproc_svr_vproc.c   25 Oct 2004 21:51:37 -0000      1.8
@@ -27,11 +27,14 @@
 #include <linux/sched.h>
 #include <linux/vproc.h>
 #include <linux/dpvproc.h>
+#include <linux/swap.h>
 #include <asm/user.h>
 #include <asm/uaccess.h>
 #include <cluster/ssisys.h>
+
+#include <cluster/gen/rproc.h>
+
 #include "rproc_server.h"
-#include "rproc.h"
 
 int
 rfork_server(
@@ -194,7 +197,9 @@
                        error = PVPOP_RECLAIM_CHILD(vc, ppid, 0, 0, 1);
                if (!error) {
                        sigaddset(&current->pending.signal, SIGSTOP);
-                       current->sigpending = 1;
+                       spin_lock_irq(&current->sighand->siglock);
+                       recalc_sigpending();
+                       spin_unlock_irq(&current->sighand->siglock);
                }
                else {
                        pvc->pvp_oppid = 0;

Index: dvp_pvpsops.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_pvpsops.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- dvp_pvpsops.c       21 Oct 2004 23:40:50 -0000      1.9
+++ dvp_pvpsops.c       25 Oct 2004 21:51:36 -0000      1.10
@@ -35,6 +35,8 @@
 #include <linux/reboot.h>
 #include <asm/uaccess.h>
 #include <linux/netdevice.h>
+#include <linux/binfmts.h>
+
 #include <cluster/clms.h>
 #include <cluster/icsgen.h>
 #include <cluster/ics.h>
@@ -43,12 +45,12 @@
 #include <cluster/node_monitor.h>
 #include <cluster/ssi/rcopy.h>
 
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 #include "rproc_server.h"
 
 #include <cluster/rpc/rpc.h>
-#include "ics_vproc_macros_gen.h"
-#include "ics_vproc_protos_gen.h"
+#include <cluster/gen/ics_vproc_macros_gen.h>
+#include <cluster/gen/ics_vproc_protos_gen.h>
 
 
 static pid_t capability_lock_owner = -1; /* owner of capability lock */
@@ -1077,24 +1079,25 @@
        clusternode_t   node,
        int             which,
        int             who,
-       int             niceval,
-       uid_t           uid,
-       uid_t           euid)
+       int             niceval)
 {
-
        /*
         * If the specified node is not the local node,
         * perform the operation remotely.
         */
        if (node != this_node) {
                int ret, error;
+               ssi_procstate_t pstate;
+
                RPVPSOP_START(node, error, "pvpsop_setpriority");
-               ret = RPVPSOP_SETPRIORITY(node, &error, which, who, niceval, 
uid, euid);
+               ssi_procstate_get(&pstate);
+               ret = RPVPSOP_SETPRIORITY(node, &error, which, who, niceval,
+                                         &pstate);
                RPVPSOP_END(ret, error, "pvpsop_setpriority");
                return(error);
        }
 
-       return(__setpriority(which, who, niceval, uid, euid));
+       return(__setpriority(which, who, niceval));
 }
 
 /*

Index: procfs_mount.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/procfs_mount.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- procfs_mount.c      20 Oct 2004 03:23:32 -0000      1.5
+++ procfs_mount.c      25 Oct 2004 21:51:37 -0000      1.6
@@ -28,16 +28,18 @@
 #include <linux/string.h>
 #include <linux/stat.h>
 #include <linux/file.h>
-#include <linux/locks.h>
 #include <linux/limits.h>
 #include <linux/dpvproc.h>
+#include <linux/mount.h>
+#include <linux/namei.h>
+
 #include <cluster/ssi/namespace.h>
 #include <cluster/nsc.h>
 #include <cluster/nodelist.h>
 #include <cluster/clms.h>
-#include "as_xscribe.h"
-#include "ics_vproc_macros_gen.h"
-#include "ics_vproc_protos_gen.h"
+#include <cluster/gen/as_xscribe.h>
+#include <cluster/gen/ics_vproc_macros_gen.h>
+#include <cluster/gen/ics_vproc_protos_gen.h>
 
 struct proc_mount_data {
        int magic;
@@ -51,31 +53,31 @@
 #define PROC_NOTIFY     1
 #define PROC_DISCOVER   2
 
-extern struct super_block * _proc_read_super(struct super_block *, void *, 
int);
-
-struct super_block *proc_read_super(struct super_block *s,void *data,
-                                   int silent)
+struct super_block *
+proc_get_sb(struct file_system_type *fs_type,
+           int flags, const char *dev_name, void *data)
 {
        struct proc_mount_data *cluster_data = data;
 
        /* Don't do anything special if SSI isn't initialized yet */
-       if (cluster_state != CLUSTER_STATE_POSTROOT && cluster_state !=
-           CLUSTER_STATE_POSTINIT)
-               return _proc_read_super(s, data, silent);
+       if (cluster_state != CLUSTER_STATE_POSTROOT &&
+           cluster_state != CLUSTER_STATE_POSTINIT)
+               return _proc_get_sb(fs_type, flags, dev_name, data);
 
        /* User mode mount just pass data on to original read_super */
        if (cluster_data->magic != PROC_MOUNT_MAGIC)
-               return _proc_read_super(s, data, silent);
+               return _proc_get_sb(fs_type, flags, dev_name, data);
 
        /* Make sure this isn't left in the super block,
         * it is used only internally for proc_notify_all().
         */
        switch (cluster_data->mode) {
        case PROC_DISCOVER:
-               cluster_data->raw_data = (char *)data +
-                                sizeof(struct proc_mount_data);
+               cluster_data->raw_data =
+                       (char *)data + sizeof(struct proc_mount_data);
        case PROC_NOTIFY:
-               return _proc_read_super(s, cluster_data->raw_data, silent);
+               return _proc_get_sb(fs_type, flags, dev_name,
+                                     cluster_data->raw_data);
        }
 
        panic(KERN_ERR "proc_read_super: Unknown mode\n");
@@ -108,8 +110,7 @@
        if (!(page = __get_free_page(GFP_KERNEL)))
                BUG();
 
-       dir_name =
-           __d_path(nd->dentry, nd->mnt, NULL, NULL, (char *)page, PAGE_SIZE);
+       dir_name = d_path(nd->dentry, nd->mnt, (char *)page, PAGE_SIZE);
 
        uid = root->i_uid;
        gid = root->i_gid;

Index: reopen.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/reopen.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- reopen.c    21 Oct 2004 23:40:50 -0000      1.8
+++ reopen.c    25 Oct 2004 21:51:37 -0000      1.9
@@ -29,6 +29,9 @@
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/dcache.h>
+#include <linux/smp_lock.h>
+#include <linux/mount.h>
+#include <linux/namei.h>
 
 #include <asm/user.h>
 #include <asm/processor.h>
@@ -45,9 +48,9 @@
 #include <cluster/clms.h>
 #include <cluster/ssi/cfs/cfs_clnt.h>
 
-#include "reopen.h"
-#include "ics_reopen_macros_gen.h"
-#include "ics_reopen_protos_gen.h"
+#include <cluster/gen/reopen.h>
+#include <cluster/gen/ics_reopen_macros_gen.h>
+#include <cluster/gen/ics_reopen_protos_gen.h>
 
 extern struct vfsmount *pipe_mnt;
 extern struct vfsmount *sock_mnt;
@@ -55,9 +58,9 @@
 
 cluster_svc_t cluster_reopen_svc;
 
-#include "icscli_reopen_gen.c"
-#include "icssvr_reopen_gen.c"
-#include "icssvr_reopen_tables_gen.c"
+#include <cluster/gen/icscli_reopen_gen.c>
+#include <cluster/gen/icssvr_reopen_gen.c>
+#include <cluster/gen/icssvr_reopen_tables_gen.c>
 
 /*
  * This file contain functions to export and reopen files and vnodes.
@@ -193,7 +196,7 @@
         * creates the mirror locks, due to the way the base code works.
         */
        /* Check if locks need to be exported. */
-       if (!(cfs_inode_is_cfs(ip) && (optype == REOP_REXEC_MIG) && 
+       if (!(cfs_inode_is_cfs(ip) && (optype == REOP_REXEC_MIG) &&
                                                (ip->i_flock != NULL))) {
                flckp->filockdata_list_t_val = NULL;
                flckp->filockdata_list_t_len = 0;
@@ -208,14 +211,14 @@
                        count++;
        }
        unlock_kernel();
-               
+
        flckp->filockdata_list_t_len = count;
 
        /* Allocate memory for export lock data */
        lockp = (struct filockdata *)kmalloc(
                                (sizeof(struct filockdata) * count), GFP_USER);
        memset(lockp, 0, (sizeof(struct filockdata) * count));
-       
+
        flckp->filockdata_list_t_val = lockp;
 
        /* Walk through the i_flock list and fill exported lock data */
@@ -302,7 +305,7 @@
                lock_retries = 0;
 retry_mirror_locks:
                /* Acquire the mirror lock on destination node*/
-               error = posix_lock_file(filp, fl, FALSE);
+               error = posix_lock_file(filp, fl);
 
                /* We don't wait since it can't conflict! */
                SSI_ASSERT(error != -EAGAIN);
@@ -343,7 +346,7 @@
                        fl->fl_remove = NULL;
                        fl->fl_type = F_UNLCK;
 
-                       ret = posix_lock_file(filp, fl, FALSE);
+                       ret = posix_lock_file(filp, fl);
                        SSI_ASSERT(!ret);
                }
        }
@@ -421,23 +424,27 @@
 
        spin_lock(&dcache_lock);
        path->parent_ino = dentry->d_parent->d_inode->i_ino;
-       path->pathname =
-               __d_path(dentry, mnt, NULL, NULL, path->pathpage, PAGE_SIZE);
+       path->pathname = d_path(dentry, mnt, path->pathpage, PAGE_SIZE);
        spin_unlock(&dcache_lock);
-       if ((!IS_ROOT(dentry) && list_empty(&dentry->d_hash)) ||
-           (dentry->d_flags & DCACHE_NFSD_DISCONNECTED)) {
+       if ((!IS_ROOT(dentry) && hlist_unhashed(&dentry->d_hash)) ||
+           (dentry->d_flags & DCACHE_DISCONNECTED)) {
                path->deleted = TRUE;
-               if (dentry->d_sb->s_op->dentry_to_fh) {
+               /* SSI_XXX: Dave */
+               if (dentry->d_sb->s_export_op &&
+                   dentry->d_sb->s_export_op->encode_fh) {
                        path->fs_len = MAX_FSFH;
-                       path->fs_fhtype = 
dentry->d_sb->s_op->dentry_to_fh(dentry, (void *)&(path->fs_fh), 
&(path->fs_len), FALSE);
+                       path->fs_fhtype =
+                               dentry->d_sb->s_export_op->encode_fh(
+                                       dentry, (void *)&(path->fs_fh),
+                                       &(path->fs_len), FALSE);
                } else {
                        printk(KERN_WARNING "reop_export_path: Can't export 
unlinked file %s\n", path->pathname);
                        goto page_free_out;
                }
        }
        if (is_shm_mmap(dentry, 0)) {
-               if ((path->svrnode = shm_get_svrnode(dentry)) == 
-                                                       CLUSTERNODE_INVAL) {
+               if ((path->svrnode = shm_get_svrnode(dentry)) ==
+                   CLUSTERNODE_INVAL) {
                        error = -EIDRM;
                        goto page_free_out;
                }
@@ -495,15 +502,13 @@
        struct nameidata *nd,
        unsigned long ino)
 {
-       int count, ctr, ret;
+       int count, ctr;
        char *pathname;
        unsigned long svrnode;
 
        pathname = *name;
-       if (*pathname == '/') {
-               ret = path_init(pathname, 0, nd);
-               return ret;
-       }
+       if (*pathname == '/')
+               return ssi_path_init(pathname, 0, nd);
 
        /*
         * SSI_XXX: We're hashing remote pipes and sockets by name, but
@@ -657,8 +662,11 @@
                        printk(KERN_WARNING "reop_import_file: Can't find super 
block\n");
                        return -ENOENT;
                }
-
-               result = sb->s_op->fh_to_dentry(sb, (void *)&(path->fs_fh), 
path->fs_len, path->fs_fhtype, FALSE);
+               /* SSI_XXX */
+               result = sb->s_export_op->decode_fh(sb, (void *)&(path->fs_fh),
+                                                   path->fs_len,
+                                                   path->fs_fhtype,
+                                                   NULL, NULL);
                if (IS_ERR(result))
                        error = PTR_ERR(result);
                else {
@@ -857,7 +865,7 @@
                return ERR_PTR(error);
 
        if (dentry->d_inode->i_sb == pipe_mnt->mnt_sb)
-               dentry->d_inode->u.ssi_pipe_i.svrnode = svr;
+               dentry->d_inode->u.generic_ip = (void *)((long)svr);
 
        filp = dentry_open(dentry, mnt, flags & ~FASYNC);
        if (IS_ERR(filp))

Index: rproc_cli_vproc.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_cli_vproc.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- rproc_cli_vproc.c   21 Oct 2004 23:40:50 -0000      1.6
+++ rproc_cli_vproc.c   25 Oct 2004 21:51:37 -0000      1.7
@@ -29,7 +29,7 @@
 #include <cluster/nsc.h>
 #include <cluster/assert.h>
 #include <cluster/ssi/util/rmtfb.h>
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 
 extern void add_relation_info_to_msg(rvp_vproc_data *, struct vproc *);
 extern void rmv_relation_info_from_msg(rvp_vproc_data *);

Index: rvp_pvpsops_server.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rvp_pvpsops_server.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- rvp_pvpsops_server.c        20 Oct 2004 03:23:32 -0000      1.6
+++ rvp_pvpsops_server.c        25 Oct 2004 21:51:37 -0000      1.7
@@ -32,8 +32,8 @@
 #include <cluster/ics.h>
 #include <cluster/ssi/rcopy.h>
 
-#include "rproc.h"
-#include "ics_vproc_protos_gen.h"
+#include <cluster/gen/rproc.h>
+#include <cluster/gen/ics_vproc_protos_gen.h>
 
 /*
  * Macros defining the generic interface between server stub and underlying

Index: procfs_subr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/procfs_subr.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- procfs_subr.c       21 Oct 2004 23:40:50 -0000      1.7
+++ procfs_subr.c       25 Oct 2004 21:51:37 -0000      1.8
@@ -2,12 +2,14 @@
 #include <linux/dpvproc.h>
 #include <linux/proc_fs.h>
 #include <linux/fs.h>
+#include <linux/tty.h>
+
 #include <cluster/clms.h>
 #include <cluster/config.h>
 #include <cluster/nodelist.h>
 #include <cluster/procfs.h>
 #include <cluster/ssi/rcopy.h>
-#include "reopen.h"
+#include <cluster/gen/reopen.h>
 
 #define PROC_MAXPIDS 20
 
@@ -240,10 +242,10 @@
 
 #endif
 
-#include "as_xscribe.h"
+#include <cluster/gen/as_xscribe.h>
 
-#include "ics_vproc_protos_gen.h"
-#include "ics_vproc_macros_gen.h"
+#include <cluster/gen/ics_vproc_protos_gen.h>
+#include <cluster/gen/ics_vproc_macros_gen.h>
 
 int
 rssi_tty_get_pgrp(clusternode_t to_node, int *rerror, dev_t dev, int *pgrp)
@@ -267,22 +269,32 @@
 {
        int error;
        int rerror;
-       clusternode_t to_node;
+       clusternode_t to_node = 0;
+       dev_t cttydev;
 
-       if (p->cttydev == NODEV) {
-               *pgrp = -1;
-               return 0;
-       }
        for (;;) {
-               to_node = p->cttynode;
+               error = 0;
+               read_lock(&tasklist_lock);
+               if (p->signal) {
+                       task_lock(p);
+                       to_node = p->signal->cttynode;
+                       cttydev = p->signal->cttydev;
+                       task_unlock(p);
+               } else {
+                       cttydev = NODEV;
+                       error = -EINVAL;
+               }
+               read_unlock(&tasklist_lock);
+               if (cttydev == NODEV) {
+                       *pgrp = -1;
+                       return error;
+               }
                if (to_node == this_node)
                        error = rssi_tty_get_pgrp(to_node, &rerror,
-                                                 p->cttydev, pgrp);
+                                                 cttydev, pgrp);
                else if (to_node >= 1) {
-                       task_unlock(p);
                        error = RSSI_TTY_GET_PGRP(to_node, &rerror,
-                                                 p->cttydev, pgrp);
-                       task_lock(p);
+                                                 cttydev, pgrp);
                }
                else
                        error = -EREMOTE;

Index: rproc_server_pproc.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_server_pproc.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- rproc_server_pproc.c        20 Oct 2004 03:23:32 -0000      1.4
+++ rproc_server_pproc.c        25 Oct 2004 21:51:37 -0000      1.5
@@ -33,7 +33,7 @@
 #include <linux/unistd.h>
 #include <cluster/ssisys.h>
 
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 #include "rproc_server.h"
 
 typedef struct task_struct proc_t;

Index: dvp_vpops.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_vpops.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- dvp_vpops.c 21 Oct 2004 23:40:50 -0000      1.18
+++ dvp_vpops.c 25 Oct 2004 21:51:36 -0000      1.19
@@ -31,6 +31,9 @@
 #include <linux/user.h>
 #include <linux/limits.h>
 #include <linux/kernel.h>
+#include <linux/namei.h>
+#include <linux/swap.h>
+#include <linux/tty.h>
 #include <asm/uaccess.h>
 #ifdef CONFIG_LDLVL
 #include <cluster/ssi/load_level.h>
@@ -41,7 +44,7 @@
 
 #include <cluster/assert.h>
 
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 
 /* External declarations */
 extern struct vproc *vproc_alloc(void);
@@ -351,11 +354,6 @@
         */
        pvc->pvp_pproc = procp;
 
-       /* Clear the file lock count for the child
-        * since locks are not inherited
-        */
-       procp->locks = 0;
-
        /* sort out the immediate family relationships */
        pvc->pvp_childl = pvp->pvp_head_childl; /* put child on its parent's */
        pvp->pvp_head_childl = vc;      /* child list */
@@ -517,14 +515,10 @@
                select_node = 1;
        }
        for (;;) {
-               pid_t pid;
-               struct task_struct *t;
                if (node == this_node || node == CLUSTERNODE_THIS) {
-                       pid = 0;
-                       t = __do_fork(clone_flags, stack_start,
-                                     ARCH_PT_REGS(regs), stack_size,
-                                     NULL, NULL, &pid);
-                       error = IS_ERR(t) ? PTR_ERR(t) : pid;
+                       error = do_fork(clone_flags, stack_start,
+                                       ARCH_PT_REGS(regs), stack_size,
+                                       NULL, NULL);
                        break;
                }
                dvp_get_remoteflags(clone_flags, &remote_flags, node);
@@ -1838,7 +1832,7 @@
                SSI_ASSERT(current->lock_depth < 0);
 
                /* make sure path exists before we go figure out which node */
-               error = path_lookup(filename, LOOKUP_FOLLOW|LOOKUP_POSITIVE, 
&nd);
+               error = path_lookup(filename, LOOKUP_FOLLOW, &nd);
                if (error)
                        return error;
                path_release(&nd);
@@ -1875,7 +1869,7 @@
                SSI_ASSERT(current->lock_depth < 0);
 
                /* make sure path exists before we go remote */
-               error = path_lookup(filename, LOOKUP_FOLLOW|LOOKUP_POSITIVE, 
&nd);
+               error = path_lookup(filename, LOOKUP_FOLLOW, &nd);
                if (error) {
 #ifdef CONFIG_LDLVL
                        if (rexec_ll)
@@ -1968,13 +1962,15 @@
                return ssi_get_tty(cttydev);
 
        /* controlling terminal is not local need to go remote */
-
+       pgrp = current->signal->tty_old_pgrp;
        error = PVPSOP_RELEASE_CTTY(cttynode, cttydev, exit, &pgrp);
+       if (error < 0) {
 #ifdef VPROC_DEBUG
-       if (error < 0)
                printk("ssi_release_tty: error %d releasing controlling "
                        "terminal\n", error);
 #endif
+               current->signal->tty_old_pgrp = 0;
+       }
 
        return NULL;
 }

Index: rproc_svr_pproc.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_svr_pproc.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- rproc_svr_pproc.c   21 Oct 2004 23:40:50 -0000      1.7
+++ rproc_svr_pproc.c   25 Oct 2004 21:51:37 -0000      1.8
@@ -32,6 +32,8 @@
 #include <linux/module.h>
 #include <linux/timer.h>
 #include <linux/personality.h>
+#include <linux/syscalls.h>
+#include <linux/mount.h>
 #include <asm/user.h>
 #include <asm/uaccess.h>
 
@@ -39,11 +41,31 @@
 #include <cluster/nodelist.h>
 #include <cluster/ssi/ssidev.h>
 
-#include "rproc.h"
-#include "reopen.h"
+#include <cluster/gen/rproc.h>
+#include <cluster/gen/reopen.h>
 
 extern kmem_cache_t *sigqueue_cachep;
-extern atomic_t nr_queued_signals;
+
+static int
+group_info_unload_msg(rvp_group_info_t *rgp)
+{
+       struct task_struct *t = current;
+       struct group_info *gp = groups_alloc(0);
+       struct group_info *old_gp;
+
+       /* SSI_XXX: fix to handle more than 32 groups. */
+       if (!gp)
+               return -ENOMEM;
+       gp->nblocks = rgp->rvp_group_info.nblocks;
+       array_cpy(gp->small_block, rgp->rvp_group_info.small_block);
+       task_lock(t);
+       old_gp = t->group_info;
+       t->group_info = gp;
+       task_unlock(t);
+       put_group_info(old_gp);
+
+       return 0;
+}
 
 static int
 unload_rvp_sigpending(
@@ -54,19 +76,16 @@
        rvp_sigqueue_t *rsqp;
        int i;
 
-       sp->head = NULL;
-       sp->tail = &sp->head;
+       INIT_LIST_HEAD(&sp->list);
        sigemptyset(&sp->signal);
        rsqp = &rsp->rvp_sp_queue;
        for (i = 0; i < rsqp->rvp_sigqueue_t_len; i++) {
-               sqp = kmem_cache_alloc(sigqueue_cachep, GFP_KERNEL);
-               if (sqp == NULL)
+               sqp = sigqueue_alloc();
+               if (!sqp)
                        break;
-               atomic_inc(&nr_queued_signals);
+               sqp->flags &= ~SIGQUEUE_PREALLOC;
                sqp->info = rsqp->rvp_sigqueue_t_val[i].rvp_sq_info;
-               sqp->next = NULL;
-               *sp->tail = sqp;
-               sp->tail = &sqp->next;
+               list_add_tail(&sqp->list, &sp->list);
                sigaddset(&sp->signal, sqp->info.si_signo);
        }
 
@@ -74,41 +93,56 @@
 }
 
 static int
-signal_unload_msg(struct task_struct *t, rvp_common_data *comm_datap,
-                 int optype)
+signal_unload_msg(rvp_common_data *comm_datap, int optype)
 {
        int error = 0;
+       struct task_struct *t = current;
+       int locked = 0;
        unsigned long flags;
        struct sigpending p;
        struct sigpending sp;
        struct sigpending *pp;
        rvp_sigpending_t *rsp;
 
-       rsp = &comm_datap->comm_pending;
-       error |= unload_rvp_sigpending(&p, rsp);
-       rsp = &comm_datap->comm_signal.rvp_ss_pending;
-       error |= unload_rvp_sigpending(&sp, rsp);
-       if (error) {
-               flush_sigqueue(&p);
-               flush_sigqueue(&sp);
-               return -ENOMEM;
+       if (optype != RVP_MIGRATE_THREAD) {
+               t->signal->cttydev = comm_datap->comm_signal.rvp_ss_cttydev;
+               t->signal->cttynode = comm_datap->comm_signal.rvp_ss_cttynode;
+               if (!RVP_ISRFORK(optype)) {
+                       t->signal->tty_old_pgrp =
+                               comm_datap->comm_signal.rvp_ss_tty_old_pgrp;
+                       rsp = &comm_datap->comm_pending;
+                       error |= unload_rvp_sigpending(&p, rsp);
+                       rsp = &comm_datap->comm_signal.rvp_ss_pending;
+                       error |= unload_rvp_sigpending(&sp, rsp);
+                       if (error) {
+                               flush_sigqueue(&p);
+                               flush_sigqueue(&sp);
+                               return -ENOMEM;
+                       }
+                       locked = 1;
+                       spin_lock_irqsave(&t->sighand->siglock, flags);
+                       pp = &t->pending;
+                       flush_sigqueue(pp);
+                       if (!list_empty(&p.list)) {
+                               list_splice(&p.list, &pp->list);
+                               pp->signal = p.signal;
+                       }
+                       pp = &t->signal->shared_pending;
+                       flush_sigqueue(pp);
+                       if (!list_empty(&sp.list)) {
+                               list_splice(&sp.list, &pp->list);
+                               pp->signal = sp.signal;
+                       }
+                       array_cpy(t->sighand->action,
+                                 comm_datap->comm_sigaction);
+               }
        }
-       spin_lock_irqsave(&current->sighand->siglock, flags);
-       pp = &t->pending;
-       flush_sigqueue(pp);
-       *pp = p;
-       if (pp->head == NULL)
-               pp->tail = &pp->head;
-       pp = &t->signal->shared_pending;
-       flush_sigqueue(pp);
-       *pp = sp;
-       if (pp->head == NULL)
-               pp->tail = &pp->head;
-       array_cpy(t->sighand->action, comm_datap->comm_sigaction);
+       if (!locked)
+               spin_lock_irqsave(&t->sighand->siglock, flags);
        t->blocked = comm_datap->comm_blocked;
        t->real_blocked = comm_datap->comm_real_blocked;
        recalc_sigpending();
-       spin_unlock_irqrestore(&current->sighand->siglock, flags);
+       spin_unlock_irqrestore(&t->sighand->siglock, flags);
 
        return 0;
 }
@@ -167,9 +201,9 @@
                /* no race here, but expand_files() expects the lock
                 * to be held
                 */
-               write_lock(&files->file_lock);
+               spin_lock(&files->file_lock);
                error = expand_files(files, fd);
-               write_unlock(&files->file_lock);
+               spin_unlock(&files->file_lock);
                if (error < 0)
                        goto out;
 
@@ -312,9 +346,8 @@
 {
        struct task_struct *t = current;
        int error = 0;
-       int i;
 
-       t->flags = comm_datap->comm_flags & ~PF_USEDFPU;
+       t->flags = comm_datap->comm_flags;
        if (RVP_ISRFORK(optype))
                t->flags &= ~PF_SUPERPRIV;
        t->ptrace = comm_datap->comm_ptrace;
@@ -325,18 +358,14 @@
        t->exit_code = comm_datap->comm_exit_code;
        t->exit_signal = comm_datap->comm_exit_signal;
        set_personality(comm_datap->comm_personality);
-       t->task_dumpable = comm_datap->comm_task_dumpable;
        if (RVP_ISMIGRATE(optype))
                t->clear_child_tid = (void *)comm_datap->comm_clear_child_tid;
        if (!RVP_ISRFORK(optype)) {
                t->pdeath_signal = comm_datap->comm_pdeath_signal;
                t->did_exec = comm_datap->comm_did_exec;
-               t->tty_old_pgrp = comm_datap->comm_tty_old_pgrp;
                t->tgid = comm_datap->comm_tgid;
-               t->leader = comm_datap->comm_leader;
+               t->signal->leader = comm_datap->comm_leader;
        }
-       t->cttydev = comm_datap->comm_cttydev;
-       t->cttynode = comm_datap->comm_cttynode;
        if (!RVP_ISRFORK(optype)) {
                t->it_real_value = comm_datap->comm_it_real_value;
                t->it_prof_value = comm_datap->comm_it_prof_value;
@@ -349,19 +378,20 @@
                                comm_datap->comm_real_timer_expires + jiffies;
                        add_timer(&t->real_timer);
                }
-               t->times = comm_datap->comm_times;
-               t->group_times = comm_datap->comm_group_times;
-               t->start_time = comm_datap->comm_start_time + jiffies;
-               array_cpy(t->per_cpu_utime, comm_datap->comm_per_cpu_utime);
-               array_cpy(t->per_cpu_stime, comm_datap->comm_per_cpu_stime);
-               t->min_flt = comm_datap->comm_min_flt;
-               t->maj_flt = comm_datap->comm_maj_flt;
+               t->utime = comm_datap->comm_utime;
+               t->stime = comm_datap->comm_stime;
+               t->cutime = comm_datap->comm_cutime;
+               t->cstime = comm_datap->comm_cstime;
                t->nvcsw = comm_datap->comm_nvcsw;
                t->nivcsw = comm_datap->comm_nivcsw;
-               t->cmin_flt = comm_datap->comm_cmin_flt;
-               t->cmaj_flt = comm_datap->comm_cmaj_flt;
                t->cnvcsw = comm_datap->comm_cnvcsw;
                t->cnivcsw = comm_datap->comm_cnivcsw;
+               t->min_flt = comm_datap->comm_min_flt;
+               t->maj_flt = comm_datap->comm_maj_flt;
+               t->cmin_flt = comm_datap->comm_cmin_flt;
+               t->cmaj_flt = comm_datap->comm_cmaj_flt;
+
+               t->start_time = comm_datap->comm_start_time + get_jiffies_64();
        }
 
        t->uid = comm_datap->comm_uid;
@@ -372,10 +402,14 @@
        t->egid = comm_datap->comm_egid;
        t->sgid = comm_datap->comm_sgid;
        t->fsgid = comm_datap->comm_fsgid;
-       t->ngroups = comm_datap->comm_ngroups;
-       for (i=0; i < t->ngroups; i++)
-               t->groups[i] = comm_datap->comm_groups[i];
-       /* cap_effective set below after opening files. */
+
+       if (optype != RVP_MIGRATE_THREAD) {
+               error = group_info_unload_msg(&comm_datap->comm_group_info);
+               if (error)
+                       goto out;
+       }
+
+       /* Cap_effective set below after opening files. */
        t->cap_inheritable = comm_datap->comm_cap_inheritable;
        t->cap_permitted = comm_datap->comm_cap_permitted;
        t->keep_capabilities = comm_datap->comm_keep_capabilities;
@@ -386,7 +420,7 @@
        array_cpy(t->rlim, comm_datap->comm_rlim);
        array_cpy(t->comm, comm_datap->comm_comm);
        if (!RVP_ISRFORK(optype))
-               semundo_unload_msg(&comm_datap->comm_semundop);
+               semundo_unload_msg(&comm_datap->comm_sysvsem);
        set_global_root();
        ssidev_devfs_mounted_wait();
        /*
@@ -404,11 +438,9 @@
         */
        t->cap_effective = comm_datap->comm_cap_effective;
 
-       if (optype != RVP_MIGRATE_THREAD) {
-               error = signal_unload_msg(t, comm_datap, optype);
-               if (error)
-                       goto out;
-       }
+       error = signal_unload_msg(comm_datap, optype);
+       if (error)
+               goto out;
 
        t->sas_ss_sp = comm_datap->comm_sas_ss_sp;
        t->sas_ss_size = comm_datap->comm_sas_ss_size;

Index: vp_debug.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/vp_debug.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- vp_debug.c  20 Oct 2004 03:23:32 -0000      1.3
+++ vp_debug.c  25 Oct 2004 21:51:37 -0000      1.4
@@ -219,9 +219,8 @@
        printk("used_math=%d\n", p->used_math);
        printk("comm=%s\n", p->comm);
        printk("link_count=%d\n", p->link_count);
-       printk("locks=%d\n", p->locks);
-       printk("semundo=%p\n", p->semundo);
-       printk("semsleeping=%p\n", p->semsleeping);
+       printk("total_link_count=%d\n", p->total_link_count);
+       printk("semvsem.undo_list=%p\n", p->sysvsem.undo_list);
        printk("fs=%p\n", p->fs);
        printk("files=%p\n", p->files);
        printk("signal=%p\n", p->signal);

Index: as_xscribe.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/as_xscribe.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- as_xscribe.c        21 Oct 2004 23:40:49 -0000      1.6
+++ as_xscribe.c        25 Oct 2004 21:51:36 -0000      1.7
@@ -41,8 +41,9 @@
 #include <linux/dpvproc.h>
 #include <linux/highmem.h>
 #include <linux/mman.h>
-#include <linux/swapctl.h>
 #include <linux/pagemap.h>
+#include <linux/rmap.h>
+#include <linux/swap.h>
 
 #include <cluster/assert.h>
 #include <cluster/rpc/rpc.h>
@@ -52,11 +53,11 @@
 #include <cluster/ssi/ipc/shm.h>
 #include <cluster/ssi/rcopy.h>
 
-#include "as_xscribe.h"
-#include "rproc.h"
+#include <cluster/gen/as_xscribe.h>
+#include <cluster/gen/rproc.h>
 
-#include "ics_vproc_protos_gen.h"
-#include "ics_vproc_macros_gen.h"
+#include <cluster/gen/ics_vproc_protos_gen.h>
+#include <cluster/gen/ics_vproc_macros_gen.h>
 
 #define        AS_VMA_MAX      (PAGE_SIZE / sizeof(as_vma_info))
 #define        AS_PAGE_MAX     ((ICS_MAX_OOL_DATA_SIZE + PAGE_SIZE - 1) / 
PAGE_SIZE)
@@ -65,17 +66,20 @@
 
 static int run_over_maxchunk;
 
-static inline int as_vma_is_private(struct vm_area_struct *vma)
+static inline int
+as_vma_is_private(struct vm_area_struct *vma)
 {
        return (!(vma->vm_flags & VM_MAYSHARE));
 }
 
-static inline int as_vma_is_file(struct vm_area_struct *vma)
+static inline int
+as_vma_is_file(struct vm_area_struct *vma)
 {
        return (vma->vm_file != NULL);
 }
 
-static inline int as_vma_is_clustermap(struct vm_area_struct *vma)
+static inline int
+as_vma_is_clustermap(struct vm_area_struct *vma)
 {
        struct file_system_type *tp;
 
@@ -115,7 +119,8 @@
 spinlock_t asx_hist_lock = SPIN_LOCK_UNLOCKED;
 DECLARE_MUTEX(asx_hist_init_sem);
 
-void asx_hist_init(void)
+void
+asx_hist_init(void)
 {
        struct asx_hist_rec **top = NULL;
        int i;
@@ -150,7 +155,8 @@
                printk(KERN_DEBUG "%s: failed\n", __FUNCTION__);
 }
 
-static int asx_hist_get_flags(struct vm_area_struct *vma, void *ptep)
+static int
+asx_hist_get_flags(struct vm_area_struct *vma, void *ptep)
 {
        int flags = 0;
        struct page *page;
@@ -163,8 +169,8 @@
                flags |= 0x0004;
        if (pte_present(*(pte_t *)ptep)) {
                flags |= 0x0008;
-               page = pte_page(*(pte_t *)ptep);
-               if (VALID_PAGE(page)) {
+               if (pfn_valid(pte_pfn(*(pte_t *)ptep))) {
+                       page = pte_page(*(pte_t *)ptep);
                        flags |= 0x10;
                        if (page->mapping)
                                flags |= 0x0020;
@@ -184,7 +190,8 @@
        return flags;
 }
 
-static struct page *asx_hist_get_page(void *ptep)
+static struct page *
+asx_hist_get_page(void *ptep)
 {
        struct page *page = NULL;
 
@@ -194,14 +201,13 @@
        return page;
 }
 
-static void *asx_hist_get_kaddr(struct page *page)
+static void *
+asx_hist_get_kaddr(struct page *page)
 {
        void *kaddr = NULL;
 
-       if (page) {
-               if (VALID_PAGE(page))
-                       kaddr = page_address(page);
-       }
+       if (page)
+               kaddr = page_address(page);
 
        return kaddr;
 }
@@ -288,10 +294,9 @@
        }
 }
 
-static void asx_print_pgdir(struct mm_struct *mm,
-                           struct vm_area_struct *vma,
-                           unsigned long *addr,
-                           pgd_t *pgdir, unsigned long pgd_end)
+static void
+asx_print_pgdir(struct mm_struct *mm, struct vm_area_struct *vma,
+               unsigned long *addr, pgd_t *pgdir, unsigned long pgd_end)
 {
        pmd_t *pmdir;
        pte_t *pte;
@@ -411,9 +416,10 @@
 
 #endif
 
-static inline int as_count_pgdir(as_info *asip, struct vm_area_struct *vma,
-                                int isprivate, unsigned long *addr,
-                                pgd_t *pgdir, unsigned long pgd_end)
+static inline int
+as_count_pgdir(as_info *asip, struct vm_area_struct *vma,
+              int isprivate, unsigned long *addr,
+              pgd_t *pgdir, unsigned long pgd_end)
 {
        int error = 0;
        pmd_t *pmdir;
@@ -438,11 +444,11 @@
                                if (pte_none(*pte))
                                        continue;
                        } else {
-                               page = pte_page(*pte);
-                               if (!VALID_PAGE(page)) {
+                               if (!pfn_valid(pte_pfn(*pte))) {
                                        error = -EBUSY;
                                        goto out;
                                }
+                               page = pte_page(*pte);
                                if (PageReserved(page)) {
                                        if (page != ZERO_PAGE(*addr)) {
                                                error = -EBUSY;
@@ -644,11 +650,11 @@
        return 0;
 }
 
-static inline int as_pull_pgdir(pid_t pid, as_pg_info *apip, int *apipp_len,
-                               struct mm_struct *mm,
-                               struct vm_area_struct *vma,
-                               int isprivate, unsigned long *addr,
-                               pgd_t *pgdir, unsigned long pgd_end)
+static inline int
+as_pull_pgdir(pid_t pid, as_pg_info *apip, int *apipp_len,
+             struct mm_struct *mm, struct vm_area_struct *vma,
+             int isprivate, unsigned long *addr,
+             pgd_t *pgdir, unsigned long pgd_end)
 {
        int error = 0;
        pmd_t *pmdir;
@@ -677,21 +683,24 @@
                                                              pte, pmdir, *pte,
                                                              0);
                                        spin_lock(&mm->page_table_lock);
+                                       pte = pte_dir =
+                                               pte_offset_map(pmdir, *addr);
                                        if (error) {
                                                error = -EBUSY;
                                                goto out;
                                        }
-                                       if (pte_present(*pte) || pte_none(*pte))
+                                       if (pte_present(*pte) ||
+                                           pte_none(*pte))
                                                break;
                                }
                                if (pte_none(*pte))
                                        continue;
                        }
-                       page = pte_page(*pte);
-                       if (!VALID_PAGE(page)) {
+                       if (!pfn_valid(pte_pfn(*pte))) {
                                error = -EBUSY;
                                goto out;
                        }
+                       page = pte_page(*pte);
                        if (PageReserved(page)) {
                                if (page != ZERO_PAGE(*addr)) {
                                        error = -EBUSY;
@@ -830,30 +839,28 @@
        return 0;
 }
 
-static unsigned int nr_free_pages_high (void)
+static inline int
+check_memory(as_info *asip)
 {
-       unsigned int sum;
-       zone_t *zone;
-       pg_data_t *pgdat = pgdat_list;
+       unsigned long inactive = 0;
+       unsigned long free = 0;
+       unsigned long pages_high = 0;
+       struct zone *zone;
 
-       sum = 0;
-       while (pgdat) {
-               for (zone = pgdat->node_zones; zone < pgdat->node_zones + 
MAX_NR_ZONES; zone++)
-                       sum += zone->pages_high;
-               pgdat = pgdat->node_next;
+       for_each_zone(zone) {
+               inactive += zone->nr_inactive;
+               free += zone->free_pages;
+               pages_high += zone->pages_high;
        }
-       return sum;
-}
 
-#define        VERY_LOW_ON_MEMORY(_asip) \
-       (nr_swap_pages < (_asip)->as_total_pg && \
-        nr_free_pages() + nr_inactive_clean_pages() + \
-        nr_inactive_dirty_pages() + nr_swap_pages <= \
-       nr_free_pages_high() + num_physpages / 30)
-#define        I_CAN_FIT(_asip) \
-       (nr_free_pages() + nr_inactive_clean_pages() + \
-       nr_inactive_dirty_pages() + nr_swap_pages \
-       > (_asip)->as_total_pg)
+       if (nr_swap_pages < asip->as_total_pg &&
+           free + inactive + nr_swap_pages <= pages_high + num_physpages / 30)
+               return 0;
+       if (free + inactive + nr_swap_pages < asip->as_total_pg)
+               return 0;
+
+       return 1;
+}
 
 static int
 as_do_pg(as_pg_info *apip, as_info *asip)
@@ -864,16 +871,17 @@
        pgd_t * pgd;
        pmd_t * pmd;
        pte_t * pte;
-       struct pte_chain *pte_chain;
 
-       pte_chain = pte_chain_alloc(GFP_KERNEL);
-       if (!pte_chain)
-               return -EAGAIN;
        down_write(&mm->mmap_sem);
        if (!(vma = find_vma(mm, apip->api_addr))) {
                error = -EINVAL;
                goto out_unlock_sem;
        }
+       if (unlikely(anon_vma_prepare(vma))) {
+               error = -EAGAIN;
+               goto out_unlock_sem;
+       }
+       flush_dcache_page(apip->api_page);
        pgd = pgd_offset(mm, apip->api_addr);
        spin_lock(&mm->page_table_lock);
        if (!(pmd = pmd_alloc(mm, pgd, apip->api_addr))) {
@@ -892,19 +900,16 @@
                error = -EINVAL;
                goto out_unlock_sem;
        }
-       lru_cache_add(apip->api_page);
-       flush_dcache_page(apip->api_page);
-       flush_page_to_ram(apip->api_page);
-       vm_set_pte(vma, apip->api_addr, pte,
-                  pte_mkdirty(mk_pte(apip->api_page, vma->vm_page_prot)));
-       pte_chain = page_add_rmap(apip->api_page, pte, pte_chain);
        mm->rss++;
+       lru_cache_add_active(apip->api_page);
+       set_pte(pte,
+               pte_mkdirty(mk_pte(apip->api_page, vma->vm_page_prot)));
+       page_add_anon_rmap(apip->api_page, vma, apip->api_addr);
        pte_unmap(pte);
  out_unlock_spin:
        spin_unlock(&mm->page_table_lock);
  out_unlock_sem:
        up_write(&mm->mmap_sem);
-       pte_chain_free(pte_chain);
 
        return error;
 }
@@ -976,10 +981,6 @@
        vma->vm_pgoff = avip->avi_pgoff;
        up_write(&current->mm->mmap_sem);
        error = 0;
-       if (avip->avi_flags & VM_READHINTMASK)
-               sys_madvise(avip->avi_start, len,
-                           (avip->avi_flags & VM_SEQ_READ) ?
-                           MADV_RANDOM : MADV_SEQUENTIAL);
  out:
        if (file)
                fput(file);
@@ -1013,17 +1014,8 @@
        asip->as_arg_end = p->mm->arg_end;
        asip->as_env_start = p->mm->env_start;
        asip->as_env_end = p->mm->env_end;
-       asip->as_rss = p->mm->rss;
-       asip->as_rlimit_rss = p->mm->rlimit_rss;
+       array_cpy(asip->as_saved_auxv, p->mm->saved_auxv);
        asip->as_dumpable = p->mm->dumpable;
-       asip->as_lrs = p->mm->mm_stat.lrs;
-       asip->as_drs = p->mm->mm_stat.drs;
-       asip->as_trs = p->mm->mm_stat.trs;
-       asip->as_stat_rss = p->mm->mm_stat.rss;
-       asip->as_notpresent = p->mm->mm_stat.notpresent;
-       asip->as_present = p->mm->mm_stat.present;
-       asip->as_sharable = p->mm->mm_stat.sharable;
-       asip->as_writable = p->mm->mm_stat.writable;
 
        return 0;
 }
@@ -1044,7 +1036,7 @@
        u_long total;
 
        asx_hist_init();
-       if (VERY_LOW_ON_MEMORY(asip) || !I_CAN_FIT(asip))
+       if (!check_memory(asip))
                return -EBUSY;
        total = 0;
        start_addr = 0;
@@ -1130,19 +1122,8 @@
        p->mm->arg_end = asip->as_arg_end;
        p->mm->env_start = asip->as_env_start;
        p->mm->env_end = asip->as_env_end;
-       p->mm->rss = asip->as_rss;
-       p->mm->rlimit_rss = asip->as_rlimit_rss;
+       array_cpy(p->mm->saved_auxv, asip->as_saved_auxv);
        p->mm->dumpable = asip->as_dumpable;
-       if (asip->as_op != ASX_RFORK) {
-               p->mm->mm_stat.lrs = asip->as_lrs;
-               p->mm->mm_stat.drs = asip->as_drs;
-               p->mm->mm_stat.trs = asip->as_trs;
-               p->mm->mm_stat.rss = asip->as_stat_rss;
-               p->mm->mm_stat.notpresent = asip->as_notpresent;
-               p->mm->mm_stat.present = asip->as_present;
-               p->mm->mm_stat.sharable = asip->as_sharable;
-               p->mm->mm_stat.writable = asip->as_writable;
-       }
  out:
        return error;
 }

Index: rvp_pvpops_server.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rvp_pvpops_server.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- rvp_pvpops_server.c 20 Oct 2004 03:23:32 -0000      1.8
+++ rvp_pvpops_server.c 25 Oct 2004 21:51:37 -0000      1.9
@@ -26,16 +26,16 @@
 #include <linux/errno.h>
 #include <linux/vproc.h>
 #include <linux/dpvproc.h>
-
+#include <linux/mount.h>
 #include <asm/user.h>
 
 #include <cluster/icsgen.h>
 #include <cluster/ics.h>
 #include <cluster/ssi/rcopy.h>
 
-#include "rproc.h"
+#include <cluster/gen/rproc.h>
 
-#include "ics_vproc_protos_gen.h"
+#include <cluster/gen/ics_vproc_protos_gen.h>
 
 
 /*
@@ -414,9 +414,9 @@
        kernel_cap_t cap_eff)
 {
        DECL_RPVP_SERVER_OP("pvpop_sigproc");
-       pid_t save_session = current->session;
-       int save_uid = current->uid;
-       int save_cap = current->cap_effective;
+       pid_t save_session = current->signal->session;
+       uid_t save_uid = current->uid;
+       kernel_cap_t save_cap = current->cap_effective;
 
        START_RPVP_SERVER_OP;
 
@@ -425,7 +425,7 @@
                return (*rval);
 
        if (pinfo) {
-               current->session = pinfo->pi_sid;
+               current->signal->session = pinfo->pi_sid;
                current->euid = current->uid = pinfo->pi_uid;
                current->cap_effective = cap_eff;
        }
@@ -434,7 +434,7 @@
        END_RPVP_SERVER_OP;
 
        if (pinfo) {
-               current->session = save_session;
+               current->signal->session = save_session;
                current->euid = current->uid = save_uid;
                current->cap_effective = save_cap;
        }
@@ -485,7 +485,7 @@
        ssi_procstate_get(&save_state);
        ssi_procstate_set(pstate);
 
-       *rval = PVPOP_PROC_NICE(PVP_DESTINATION, nice, uid, flag);
+       *rval = PVPOP_PROC_NICE(PVP_DESTINATION, nice, flag);
 
        ssi_procstate_set(&save_state);
 
@@ -916,7 +916,7 @@
                char *tmp = (char*)__get_free_page(GFP_KERNEL);
                char *pathname = NULL;
 
-               pathname = __d_path(de, vfsmnt, NULL, NULL, tmp, PAGE_SIZE);
+               pathname = d_path(de, vfsmnt, tmp, PAGE_SIZE);
                *pathlen = tmp + PAGE_SIZE - pathname;
 
                *path = kmalloc((*pathlen), GFP_KERNEL);
@@ -1077,9 +1077,7 @@
        if (*rval)
                return (*rval);
 
-       *rval = PVPOP_PROCFS_TID_LIST(PVP_DESTINATION,
-                                   index,
-                                   buf,buflen);
+       *rval = PVPOP_PROCFS_TID_LIST(PVP_DESTINATION, index, buf, buflen);
 
        END_RPVP_SERVER_OP;
 



-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl


Ruby Jobs
Java Jobs
Jobs in California
more...
what
job title, keywords
where
city, state, zip
jobs by job search
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
encryption.gpg....    ietf.rfc822/199...    freebsd.devel.i...    lang.haskell.li...    mail.squirrelma...    web.zope.plone....    yellowdog.gener...    text.xml.xalan....    recreation.phot...    kde.devel.educa...    hardware.bus.ca...    printing.ghosts...    voip.peering/20...    assembly/2006-0...    org.user-groups...    culture.interne...    network.i2p/200...    boot-loaders.ya...    xfree86.render/...    qnx.openqnx.dev...    jakarta.velocit...    user-groups.pal...   
Home | blog view | USPTO Patent Archive | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe