Quoting Oren Laadan ([email protected]):
> The task address space (task->mm) may be shared between processes if
> CLONE_VM is used, and particularly among threads. Accordingly, treat
> 'task->mm' as a shared object: during checkpoint check against the
> objhash and only dump the contents if seen for the first time. During
> restart, likewise, only restore if it's a new instance, otherwise use
> the one already registered in the objhash.
> 
> Signed-off-by: Oren Laadan <[email protected]>

Cool.

Acked-by: Serge Hallyn <[email protected]>

Although:

> +     /* if the mm's objref is in the objhash, use that instance */
> +     mm = cr_obj_get_by_ref(ctx, hh->objref, CR_OBJ_MM);
> +     if (IS_ERR(mm)) {
> +             ret = PTR_ERR(mm);
> +             goto out;
> +     }
> 
> +     if (mm) {
> +             if (mm != current->mm) {

In what twisted world could mm == current->mm at restart?

> +                     ret = exec_mmap(mm);
> +                     if (ret < 0)
> +                             goto out;
> +                     atomic_inc(&mm->mm_users);
> +             }
> +             ret = 0;
> +             goto out;
> +     }
> +
> +     /* otherwise, add our mm to the objhash for future generations */
>       mm = current->mm;
> +     ret = cr_obj_add_ref(ctx, mm, hh->objref, CR_OBJ_MM, 0);
> +     if (ret < 0)
> +             goto out;
> 
>       /* point of no return -- destruct current mm */
>       down_write(&mm->mmap_sem);
> diff --git a/include/linux/checkpoint.h b/include/linux/checkpoint.h
> index 043535c..1bfe284 100644
> --- a/include/linux/checkpoint.h
> +++ b/include/linux/checkpoint.h
> @@ -77,6 +77,7 @@ extern void cr_ctx_put(struct cr_ctx *ctx);
>  enum {
>       CR_OBJ_FILE = 1,
>       CR_OBJ_INODE,
> +     CR_OBJ_MM,
>       CR_OBJ_MAX
>  };
> 
> -- 
> 1.5.4.3
_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to