logo       


[SSI] openssi/kernel/cluster/ssi/vproc rproc_server.c,1.3,1.3.2.1 rproc_ser: msg#00532

Subject: [SSI] openssi/kernel/cluster/ssi/vproc rproc_server.c,1.3,1.3.2.1 rproc_server.h,1.2,1.2.2.1 rproc_server_pproc.c,1.2.2.1,1.2.2.2 rproc_svr_vproc.c,1.5.2.3,1.5.2.4
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc
In directory 
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16979/openssi/kernel/cluster/ssi/vproc

Modified Files:
      Tag: OPENSSI-RH
        rproc_server.c rproc_server.h rproc_server_pproc.c 
        rproc_svr_vproc.c 
Log Message:
M ci/kernel/cluster/arch/i386/include/arch_regs.h
M openssi/kernel/cluster/arch/i386/vproc/rproc_arch.c
M openssi/kernel/cluster/ssi/vproc/rproc_server.c
M openssi/kernel/cluster/ssi/vproc/rproc_server.h
M openssi/kernel/cluster/ssi/vproc/rproc_server_pproc.c
M openssi/kernel/cluster/ssi/vproc/rproc_svr_vproc.c
        Fixed race in rexec where arguments would be freed before
        they were used. In order to work properly with ptrace, the
        way the exec is done for rexec was totally reworked.
 


Index: rproc_server_pproc.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/Attic/rproc_server_pproc.c,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -d -r1.2.2.1 -r1.2.2.2
--- rproc_server_pproc.c        25 Feb 2004 02:27:07 -0000      1.2.2.1
+++ rproc_server_pproc.c        30 Mar 2004 02:28:56 -0000      1.2.2.2
@@ -41,15 +41,14 @@
 int
 rproc_create_proc(
        void (*svrfunc)(rvp_remote_args_t *),
-       rvp_remote_args_t *svrargs,
-       int flags)
+       rvp_remote_args_t *svrargs)
 {
        int error;
 
        INIT_EVENT(&svrargs->childdone);
 
        error = kernel_thread_with_pid((void *)svrfunc, svrargs,
-                                      flags, svrargs->childpid);
+                                      0, svrargs->childpid);
        if (error < 0)
                DEINIT_EVENT(&svrargs->childdone);
        else if (error == svrargs->childpid) {
@@ -113,14 +112,14 @@
 rexecve_server_setup(
        rvp_remote_args_t *re_args)
 {
-       int error;
+       struct pt_regs regs;
 
        re_args->retval = rexecve_server(re_args->rexecve_args.vprocp,
                                         current,
                                         re_args->rexecve_args.fname,
                                         re_args->rexecve_args.argv,
                                         re_args->rexecve_args.envp,
-                                        re_args->remotedata);
+                                        re_args->remotedata, &regs);
 
        if (re_args->retval) {
                struct vproc *ve;
@@ -154,29 +153,8 @@
                 */
                SIGNAL_EVENT(&re_args->childdone);
 
-               /* since execve will go back to syscall, if its being
-                * ptrace it will go into syscall_trace and hang the rexec,
-                * because its vforked, need to clear the vfork to finish
-                */
-               if (current->ptrace) {
-                       struct completion *vfork_done = current->vfork_done;
-                       current->vfork_done = NULL;
-                       complete(vfork_done);
-               }
-
-               current->execnode = this_node;
-
-               error = execve(re_args->rexecve_args.fname,
-                              re_args->rexecve_args.argv,
-                              re_args->rexecve_args.envp);
-
-               if (error != 0) {
-                       printk("rexecve failed in execve with %d\n", error);
-                       /* Need to send error back to client node, but
-                        * by this time our client rexec is gone
-                        */
-               }
-               do_exit(CLD_EXITED);
+               ret_from_rexec(&regs);
+               /*UNREACHABLE*/
        }
 }
 

Index: rproc_server.h
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/Attic/rproc_server.h,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -d -r1.2 -r1.2.2.1
--- rproc_server.h      3 Oct 2003 23:25:49 -0000       1.2
+++ rproc_server.h      30 Mar 2004 02:28:56 -0000      1.2.2.1
@@ -59,7 +59,7 @@
 
 
 extern int rproc_create_proc(void (*)(rvp_remote_args_t *),
-                            rvp_remote_args_t *, int);
+                            rvp_remote_args_t *);
 extern void migrate_server_setup(rvp_remote_args_t *);
 extern int migrate_server(struct vproc *, struct task_struct *,
                          struct rvp_remote_data *, struct arch_regs_stack *);
@@ -69,7 +69,7 @@
 extern void rexecve_server_setup(rvp_remote_args_t *);
 extern int rexecve_server(struct vproc *, struct task_struct *,
                          char *, char **, char **,
-                         struct rvp_remote_data *);
+                         struct rvp_remote_data *, struct pt_regs *);
 extern int svr_rfork(struct rvp_remote_data *, pid_t *, int);
 extern int svr_rexecve(char *, char **, char **, struct rvp_remote_data *);
 extern int svr_migrate(struct rvp_remote_data *, int);

Index: rproc_server.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/Attic/rproc_server.c,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -d -r1.3 -r1.3.2.1
--- rproc_server.c      3 Oct 2003 23:25:49 -0000       1.3
+++ rproc_server.c      30 Mar 2004 02:28:56 -0000      1.3.2.1
@@ -56,7 +56,7 @@
        args->rfork_args.parentpid = rf_data->rd_vproc_data->rpvp_ppid;
        args->rfork_args.flags = flags;
 
-       error = rproc_create_proc(rfork_server_setup, args, 0);
+       error = rproc_create_proc(rfork_server_setup, args);
 
        kfree((caddr_t)args);
        return error;
@@ -117,7 +117,7 @@
        args->rexecve_args.argv = argv;
        args->rexecve_args.envp = envp;
 
-       error = rproc_create_proc(rexecve_server_setup, args, CLONE_VFORK);
+       error = rproc_create_proc(rexecve_server_setup, args);
 
        kfree((caddr_t)args);
 
@@ -181,7 +181,7 @@
        args->migrate_args.vprocp = vm;
        args->migrate_args.is_sigmigrate = is_sigmigrate;
 
-       error = rproc_create_proc(migrate_server_setup, args, 0);
+       error = rproc_create_proc(migrate_server_setup, args);
 
        kfree((caddr_t)args);
 

Index: rproc_svr_vproc.c
===================================================================
RCS file: 
/cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/Attic/rproc_svr_vproc.c,v
retrieving revision 1.5.2.3
retrieving revision 1.5.2.4
diff -u -d -r1.5.2.3 -r1.5.2.4
--- rproc_svr_vproc.c   11 Mar 2004 02:33:44 -0000      1.5.2.3
+++ rproc_svr_vproc.c   30 Mar 2004 02:28:56 -0000      1.5.2.4
@@ -224,7 +224,8 @@
        char *fname,
        char **argv,
        char **envp,
-       struct rvp_remote_data *re_datap)
+       struct rvp_remote_data *re_datap,
+       struct pt_regs *regs)
 {
        rvp_vproc_data *vp_datap = re_datap->rd_vproc_data;
        int child_pid_cnt = vp_datap->rpvp_child_pidp.pidlist_len;
@@ -242,7 +243,6 @@
        struct vproc *g;
        struct pvproc *pve = PVP(ve);
        int i, error;
-       struct file *file;
        clusternode_t clinode = 0;
        int ll_select = 0;
 
@@ -268,19 +268,13 @@
        if (error)
                return error;
 
-       /*
-        * Now that the cwd, root have been established, check the
-        * filename exists before setting up the vproc
-        */
-       file = open_exec(fname);
-       if (!IS_ERR(file))
-               fput(file);
+       error = ssi_do_execve(fname, argv, envp, regs, 0);
+       /* Successful? */
+       if (error == 0)
+               current->ptrace &= ~PT_DTRACE;
        else
-               error = PTR_ERR(file);
-       if (error)
                return error;
 
-
        /*
         *  setup relationships before exec'ing process.
         */



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click


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