Re: [Patch] Do not crash upon remote-remote migration

"Moe Bar" <[email protected]>
Newsgroups gmane.linux.cluster.openmosix.devel
Message-ID <[email protected]>
Another keeper for the new official git tree.

Moshe



On 3/31/06, Ansgar Esztermann <[email protected]> wrote:
>
> When asking an already migrated process to move to another (remote)
> node, bring it back home first. The current implementation leads to a
> crash. A direct remote->remote migration would be better, but is not
> implemented yet.
>
> ---
>
> hpc/migctrl.c |   84
> +++++++++++++++++++++++++++++++--------------------------
> 1 files changed, 46 insertions(+), 38 deletions(-)
>
> 2a7d618eb6d2ae0942349f16e7a46d13351d7dc2
> diff --git a/hpc/migctrl.c b/hpc/migctrl.c
> index 18a798a..dee9adb 100644
> --- a/hpc/migctrl.c
> +++ b/hpc/migctrl.c
> @@ -79,6 +79,44 @@ int task_remote_wait_expel(task_t *p)
>         return task_remote_expel(p);
> }
>
> +
> +/**
> + * task_local_bring - Receive task back in the deputy stub
> + * @p:         deputy task to receive
> + * @reason:    reason to send (if any)
> + **/
> +static int task_local_bring(task_t *p, int reason)
> +{
> +       int error;
> +       om_link_t *link;
> +
> +       if (obtain_mm(p)) {
> +               printk(KERN_ERR "unable to obtain mm\n");
> +               goto failed;
> +       }
> +
> +       /* send remote request */
> +       comm_send_req(p->om.contact, DEP_COMING_HOME);
> +
> +       /* see if other part is with on this */
> +       if (mig_recv_hshake(p->om.contact))
> +               goto failed;
> +
> +       /* receive the process back */
> +       error = mig_do_receive(p);
> +       if (error)
> +               goto failed;
> +
> +       task_clear_dflags(p, DDEPUTY);
> +       link = task_set_comm(p, NULL);
> +       comm_close(link);
> +
> +       return 0;
> +failed:
> +       OMBUG("failed\n");
> +       return -1;
> +}
> +
> /**
>   * task_local_send - Send a local task to remote
>   * @p:         task to send
> @@ -90,6 +128,14 @@ static int task_local_send(task_t *p, st
>         om_link_t *mlink;
>         int error = 0;
>
> +       /* if this is a stub, bring it back first */
> +       if (p->om.contact)
> +       {
> +               error = task_local_bring(p, reason);
> +               if (error)
> +                       goto failed;
> +       }
> +
>         sockaddr_setup_port(whereto, REMOTE_DAEMON_PORT);
>         mlink = comm_setup_connect(whereto, 0);
>         if (!mlink) {
> @@ -123,44 +169,6 @@ failed:
> }
>
>
> -
> -/**
> - * task_local_bring - Receive task back in the deputy stub
> - * @p:         deputy task to receive
> - * @reason:    reason to send (if any)
> - **/
> -static int task_local_bring(task_t *p, int reason)
> -{
> -       int error;
> -       om_link_t *link;
> -
> -       if (obtain_mm(p)) {
> -               printk(KERN_ERR "unable to obtain mm\n");
> -               goto failed;
> -       }
> -
> -       /* send remote request */
> -       comm_send_req(p->om.contact, DEP_COMING_HOME);
> -
> -       /* see if other part is with on this */
> -       if (mig_recv_hshake(p->om.contact))
> -               goto failed;
> -
> -       /* receive the process back */
> -       error = mig_do_receive(p);
> -       if (error)
> -               goto failed;
> -
> -       task_clear_dflags(p, DDEPUTY);
> -       link = task_set_comm(p, NULL);
> -       comm_close(link);
> -
> -       return 0;
> -failed:
> -       OMBUG("failed\n");
> -       return -1;
> -}
> -
> /**
>   * task_move_remote2remote - migrate a task from remote to remote
>   * @p:         task to send
> --
> 1.2.4
>
> --
> Ansgar Esztermann
> Researcher & Sysadmin
> http://www2.thphy.uni-duesseldorf.de/~ansgar
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.